Viktor1703
AutoIT Гуру
- Сообщения
- 1,535
- Репутация
- 413
Код сырой, но работает, если кто захочет, то можете доработать, даже можно написать UDF для отправки на Gmail, Yandex и другие Smtp сервера и прикрутить возможность отправки файлов почтой.
Пример
Протокол smtp.mail.ru
Пример
Код:
SendMail('Кому@mail.ru', 'От кого@mail.ru', 'Пароль', 'Тема', 'Сообщение')
Func SendMail($To, $sFrom, $sPassw, $sSubject, $sMessage)
TCPStartup()
$iSocket = TCPConnect(TCPNameToIP('smtp.mail.ru'), 25)
TCPSend($iSocket, 'HELO ' & @LogonDomain & @CRLF)
While 1
$sRecv = TCPRecv($iSocket, 2048)
If $sRecv <> '' Then
If StringRegExp($sRecv, '250 smtp(.*).mail.ru') Then TCPSend($iSocket, 'AUTH LOGIN' & @CRLF)
If StringInStr($sRecv, 'VXNlcm5hbWU6') Then TCPSend($iSocket, _Base64_Encode($sFrom))
If StringInStr($sRecv, 'UGFzc3dvcmQ6') Then TCPSend($iSocket, _Base64_Encode($sPassw))
If StringInStr($sRecv, 'Authentication succeeded') Then
TCPSend($iSocket, 'MAIL FROM: ' & $sFrom & @CRLF)
TCPSend($iSocket, 'RCPT TO: ' & $To & @CRLF)
EndIf
If StringInStr($sRecv, '250 Accepted') Then TCPSend($iSocket, 'DATA' & @CRLF)
If StringInStr($sRecv, '354 Enter message') Then
TCPSend($iSocket, 'From: ' & $sFrom & @CRLF)
TCPSend($iSocket, 'Subject: ' & $sSubject & @CRLF & @CRLF)
TCPSend($iSocket, $sMessage & @CRLF)
TCPSend($iSocket, '.' & @CRLF )
EndIf
If StringInStr($sRecv, '250 OK id=') Then
TCPSend($iSocket, 'QUIT' & @CRLF)
ExitLoop
EndIf
EndIf
Switch StringMid($sRecv, 1, 3)
Case 421 To 554
Return SetError(-1, 0, 0)
EndSwitch
Wend
TCPCloseSocket($iSocket)
TCPShutdown()
Return 1
EndFunc
Func _Base64_Encode($sData, $iFlag = 1)
Local $Ret, $bData, $tData, $tText
$bData = StringToBinary($sData, $iFlag)
$tData = DllStructCreate('byte[' & BinaryLen($bData) & ']')
DllStructSetData($tData, 1, $bData)
$Ret = DllCall('crypt32.dll', 'bool', 'CryptBinaryToStringW', 'ptr', DllStructGetPtr($tData), 'dword', DllStructGetSize($tData), 'dword', 1, 'ptr', 0, 'dword*', 0)
If (@error) Or (Not $Ret[0]) Then
Return SetError(1, 0, '')
EndIf
$tText = DllStructCreate('wchar[' & $Ret[5] & ']')
$Ret = DllCall('crypt32.dll', 'bool', 'CryptBinaryToStringW', 'ptr', DllStructGetPtr($tData), 'dword', DllStructGetSize($tData), 'dword', 1, 'ptr', DllStructGetPtr($tText), 'dword*', $Ret[5])
If (@error) Or (Not $Ret[0]) Then
Return SetError(1, 0, '')
EndIf
Return DllStructGetData($tText, 1)
EndFunc
Протокол smtp.mail.ru