отправка писем на winsock

Тема в разделе "WASM.WIN32", создана пользователем seiko, 28 дек 2008.

  1. blapit

    blapit New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2009
    Сообщения:
    1
    Конечно наказуема, а как же иначе. :)
     
  2. seiko

    seiko New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    98
    на мейл ру при авторизации щас используется base64?
     
  3. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
  4. x0man

    x0man New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2008
    Сообщения:
    358
    Код (Text):
    1. try
    2. ...
    3. finally
    4. ...
    5. end;
    Улыбнуло )
     
  5. seiko

    seiko New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    98
    а че такого? типа при использовании винапи это вдрова грех?
     
  6. seiko

    seiko New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    98
    на отправке логина сервер долго не отвечает (прога ждет)пишет "421 ... SMTP command timeout - closing connection", а WSAGetLastError не ругается и возвращает ноль, в чем может быть дело
     
  7. seiko

    seiko New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    98
    Код (Text):
    1. program mailled;
    2.  
    3. uses
    4.   windows,
    5.   winsock2;
    6.  
    7. {
    8. smtp - ip адрес smtp сервера
    9. port - порт smtp сервера, по умолчанию 25
    10. from - адрес отправителя
    11. dest - адрес получателя
    12. subject - тема письма
    13. body - текст писма
    14. Возвращает True если письмо было успешно отправленно...
    15. }
    16.  
    17. type
    18.  TaPInAddr = Array [0..10] of PInAddr;
    19.  PaPInAddr = ^TaPInAddr;
    20.  
    21. const
    22.  Codes64 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/';
    23.  
    24. var Host: PHostEnt; pptr: PaPInAddr; WSAData: TWSAData;
    25.  
    26. function Encode64(S: string): string;
    27. var i,a,x,b: integer;
    28. begin
    29.  result := '';
    30.  a := 0;
    31.  b := 0;
    32.  for i := 1 to Length(s) do
    33.   begin
    34.    x := Ord(s[i]);
    35.    b := b * 256 + x;
    36.    a := a + 8;
    37.    while a >= 6 do
    38.     begin
    39.      a := a - 6;
    40.      x := b div (1 shl a);
    41.      b := b mod (1 shl a);
    42.      result := result + Codes64[x + 1];
    43.     end;
    44.   end;
    45.   if a > 0 then
    46.    begin
    47.     x := b shl (6 - a);
    48.     result := result + Codes64[x + 1];
    49.    end;
    50. end;
    51.  
    52. {function Decode64(S: string): string;
    53. var i,a,x,b: integer;
    54. begin
    55.  result := '';
    56.  a := 0;
    57.  b := 0;
    58.  for i := 1 to length(s) do
    59.   begin
    60.    x := pos(s[i], codes64) - 1;
    61.    if x >= 0 then
    62.     begin
    63.      b := b * 64 + x;
    64.      a := a + 6;
    65.      if a >= 8 then
    66.       begin
    67.        a := a - 8;
    68.        x := b shr a;
    69.        b := b mod (1 shl a);
    70.        x := x mod 256;
    71.        result := result + chr(x);
    72.       end;
    73.     end
    74.    else exit;
    75.   end;
    76. end;}
    77.  
    78. function mail(smtp: PChar; port: integer; from, dest, subject,body: string): bool;
    79. const
    80.  cl = #13#10;
    81. var
    82.   Host: TSockAddrIn;
    83.   Sock: TSocket;
    84.   res: Integer;
    85.  
    86.   { отправляем данные через сокет }
    87.   procedure senddata(str: string);
    88.   var
    89.     i: integer;
    90.   begin
    91.     for i := 1 to Length(str) do
    92.       if send(Sock, str[i], 1, 0) = SOCKET_ERROR then
    93.         exit;
    94.   end;
    95.  
    96.   { получаем ответ от команды }
    97.   function recvdata(accept: string): bool;
    98.   var
    99.     buff: array[1..255] of Char;
    100.   begin
    101.     res := recv(Sock, buff, SizeOf(buff), 0);
    102.     Result := (Res = SOCKET_ERROR) or (Copy(buff, 1, 3) = accept);
    103.    end;
    104.  
    105. begin
    106.   try
    107.     result := false;
    108.     { инициализация сокета }
    109.     Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    110.     if Sock = INVALID_SOCKET then
    111.       Exit;
    112.  
    113.     { устанавливаем хост и порт сервера }
    114.     res := inet_addr(smtp);
    115.     if res <= 0 then
    116.       exit;
    117.  
    118.     Host.sin_family := AF_INET;
    119.     Host.sin_port := htons(port);
    120.     Host.sin_addr.S_addr := res;
    121.  
    122.     { подключаемся к серверу }
    123.     if connect(Sock, @Host, SizeOf(Host)) > 0 then
    124.       Exit;
    125.  
    126.     { приветствие сервера }
    127.     if not recvdata('220') then
    128.       Exit;
    129.  
    130.     { EHLO }
    131.     senddata('EHLO' + string(smtp) + cl);
    132.     if not recvdata('250') then
    133.       Exit;
    134.  
    135.     { AUTH LOGIN }
    136.  
    137.     senddata('AUTH LOGIN' {+ string(smtp)} + cl);
    138.     if not recvdata('334') then
    139.       Exit;
    140.  
    141.     { LOGIN }
    142.  
    143.     senddata(encode64('<login>'));
    144.     if not recvdata('334') then {вот здесь получаю 421 и тип таймаут от сервера}
    145.       Exit;
    146.  
    147.     { PASSWORD }
    148.  
    149.     senddata(encode64('<password>'));
    150.     if not recvdata('235') then
    151.       Exit;
    152.  
    153.     { MAIL FROM: }
    154.     senddata('MAIL FROM:' + from + cl);
    155.     if not recvdata('250') then
    156.       Exit;
    157.  
    158.     { RCPT TO: }
    159.     senddata('RCPT TO:' + dest + cl);
    160.     if not recvdata('250') then
    161.       Exit;
    162.  
    163.     { DATA }
    164.     senddata('DATA' + cl);
    165.     if not recvdata('354') then
    166.       Exit;
    167.  
    168.     { отправляем текст сообщения }
    169.     senddata('Subject:' + subject + cl + cl + body + cl + '.');
    170.     if not recvdata('250') then
    171.       Exit;
    172.  
    173.     { отключаемся от сервера }
    174.     senddata('QUIT' + cl);
    175.  
    176.     result := true;
    177.   finally
    178.     { убиваем сокет }
    179.     closesocket(sock);
    180.   end;
    181. end;
    182.  
    183. begin
    184.  if WSAStartUp(257, WSAData) <> 0 then exit;
    185.  host := GetHostByName('smtp.mail.ru');
    186.  if host = nil then
    187.   begin
    188.    WSACleanup;
    189.    halt;
    190.   end;
    191.  pPtr := PaPInAddr(host^.h_addr_list);
    192.  if pPtr <> nil then
    193.   mail(inet_ntoa(pPtr^[0]^),25,'...@mail.ru','...@list.ru','Automatic sending','Hello, I am the machine');
    194.  WSACleanup;
    195. end.
     
  8. seiko

    seiko New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2007
    Сообщения:
    98
    мне кто-нить может объяснить возможные причины подобного ответа со стороны сервера?
     
  9. _tmp17628

    _tmp17628 New Member

    Публикаций:
    0
    Регистрация:
    7 фев 2009
    Сообщения:
    144
    давай лог сниффера