Как отправить письмо скрытно от пользователя по протоколу SMTP

Советы » E-mail » Как отправить письмо скрытно от пользователя по протоколу SMTP

{ smtp - ip адрес smtp сервера port - порт smtp сервера, по умолчанию 25 from - адрес отправителя dest - адрес получателя
subject - тема письма
body - текст писма
Возвращает True если письмо было успешно отправленно...

}

function

mail(smtp: string

; port: integer; from, dest, subject,   body: string

): bool; const


  cl = #13#10;
var


WSAData: TWSAData;
  Host: TSockAddrIn;   Sock: TSocket;
  res: Integer;
  buff: array

[1..255] of

Char;
  { отправляем данные через сокет }   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(accept: string

): bool;   var


    buff: array

[1..255] of

Char;   begin


    res := recv(Sock, buff, SizeOf(buff), 0);     Result := (Res = SOCKET_ERROR) or

(Copy(buff, 1, 3) = accept);
  end

;

begin


  try


    result := false;     { инициализация сокета }     WSAStartUp(257, WSAData);     Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);     if

Sock = INVALID_SOCKET then

      Exit;
    { устанавливаем хост и порт сервера }
    res := inet_addr(PChar(smtp));     if

res <= 0 then

      exit;
    Host.sin_family := AF_INET;     Host.sin_port := htons(port);     Host.sin_addr.S_addr := res;
    { подключаемся к серверу }     if

connect(Sock, Host, SizeOf(Host)) > 0 then

      Exit;
    { приветствие сервера }     if

not

recvdata('220') then

      Exit;
    { EHLO }     senddata('EHLO' + cl);     if

not

recvdata('250') then

      Exit;
    { MAIL FROM: }     senddata('MAIL FROM:' + from + cl);     if

not

recvdata('250') then

      Exit;
    { RCPT TO: }     senddata('RCPT TO:' + dest + cl);     if

not

recvdata('250') then

      Exit;
    { DATA }     senddata('DATA' + cl);     if

not

recvdata('354') then

      Exit;
    { отправляем текст сообщения }     senddata('Subject:' + subject + cl + cl + body + cl + '.');     if

not

recvdata('250') then

      Exit;
    { отключаемся от сервера }     senddata('QUIT' + cl);
    result := true;   finally


    { убиваем сокет }     closesocket(sock);     WSACleanup;   end

;
end

;

{ mail('127.0.0.1',25,'bboy-ne@yandex.ru' ,'admin@company.mail', 'subj', 'body text');

p.s.: Тестировалась на e-mail сервере Alt-N Daemond Pro for Windows v6.5.1...

Функция делалась на основе статьи "Простой протокол передачи почты (SMTP)"  

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com