Цитата(FRAGNATIC @ 1.4.2005, 05:26) | Код | unit SendMailTo;
interface
uses WinSock, SysUtils, Windows; // не забудь этот модуль для работы с сокетами
function sendmail(const smtp, mail_from, mail_to, body: string): boolean;
implementation
function sendmail(const smtp, mail_from, mail_to, body: string): boolean;
const ok = '250'; cl = #13#10;
var WSAData: TWSAData; Host: TSockAddrIn; Sock: TSocket; res: integer; hostEnt: PHostEnt;
{ отправляем данные через сокет } procedure senddata(str: string); var i: integer; begin for i := 1 to length(str) do if send(sock, str[i], 1, 0) = SOCKET_ERROR then exit; end;
{ получаем ответ от команды } function recvdata(const accept: string): bool; var buff: array[1..255] of char; begin res := recv(Sock, buff, 255, 0); result := (res = SOCKET_ERROR) or (copy(buff, 1, 3) = accept); end;
begin result := false; try WSAStartUp($101, WSAData); Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP); if Sock = INVALID_SOCKET then exit;
// получаем IP адрес SMTP-сервера и переводим его через inet_addr hostEnt := gethostbyname(PChar(smtp)); if hostEnt = nil then exit; res := inet_addr(PChar(inttostr(byte(hostEnt^.h_addr_list^[0]))+'.'+inttostr(byte(hostEnt^.h_addr_list^[1]))+'.'+ inttostr(byte(hostEnt^.h_addr_list^[2]))+'.'+inttostr(byte(hostEnt^.h_addr_list^[3])))); if res <= 0 then exit; { устанавливаем хост и порт сервера } Host.sin_family := AF_INET; Host.sin_port := htons(25); // порт 25, можешь поменять Host.sin_addr.S_addr := res;
if connect(Sock, Host, SizeOf(Host)) > 0 then exit; sleep(200); if not recvdata('220') then exit; // приветствие сервера senddata('HELO SANTA' + cl); // после HELO можешь написать свое приветствие sleep(200); if not recvdata(ok) then exit; senddata('MAIL FROM:' + '<'+mail_from+'>' + cl); sleep(200); if not recvdata(ok) then exit; senddata('RCPT TO:' + '<'+mail_to+'>' + cl); sleep(200); if not recvdata(ok) then exit; senddata('DATA' + cl); sleep(200); if not recvdata('354') then exit; senddata(body + cl + '.' + cl); // отправляем текст сообщения sleep(200); if not recvdata(ok) then exit; senddata('QUIT' + cl); // отключаемся от сервера result := true; finally closesocket(sock); WSACleanup end; end; end.
|
использование автор вроде как DarkDaemon ) Добавлено @ 05:27 опять е можно через всякие компоненты слать + в ДРКБ вроде тож есть примеры |
у меня как то впроде нет SysUtils. Ато компилятор говорит что SysUtils неопознаный обьект! |