SMTP. Где ошибка?

Тема в разделе "WASM.NETWORKS", создана пользователем bondyara, 5 авг 2009.

  1. bondyara

    bondyara New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2009
    Сообщения:
    39
    Доброго времени суток!

    Привожу часть кода

    После коннекта:
    invoke recv,hsock,addr tempBuffer,BUFFER_SIZE,0
    invoke MessageBox,0,addr tempBuffer,addr tempBuffer,0 - показывает
    ответ № 220
    invoke Mys,SADD("HELO mail.ru",0)
    invoke recv,hsock,addr tempBuffer,BUFFER_SIZE,0
    invoke MessageBox,0,addr tempBuffer,addr tempBuffer,0 - через некоторое
    время ошибка TimeOut

    invoke Mys,SADD("MAIL FROM:<my@mail.ru>",0)
    invoke recv,hsock,addr tempBuffer,BUFFER_SIZE,0
    invoke MessageBox,0,addr tempBuffer,addr tempBuffer,0

    invoke Mys,SADD("RCPT TO:<mlrb@mail.ru>",0)
    invoke recv,hsock,addr tempBuffer,BUFFER_SIZE,0
    invoke MessageBox,0,addr tempBuffer,addr tempBuffer,0

    invoke Mys,SADD("DATA",13,10,0)
    invoke recv,hsock,addr tempBuffer,BUFFER_SIZE,0
    invoke MessageBox,0,addr tempBuffer,addr tempBuffer,0

    invoke Mys,SADD("Hi, I`m Troyan",13,10,0)
    invoke recv,hsock,addr tempBuffer,BUFFER_SIZE,0
    invoke MessageBox,0,addr tempBuffer,addr tempBuffer,0

    invoke Mys,SADD(13,10,".",13,10,0)
    invoke recv,hsock,addr tempBuffer,BUFFER_SIZE,0
    invoke MessageBox,0,addr tempBuffer,addr tempBuffer,0

    Mys proc SendStr : DWORD
    ; edi указывает на пришедшую строку
    mov edi, SendStr
    ; цикл перебора
    .WHILE TRUE
    ; если конец строки - выход из цикла
    .BREAK .IF (byte ptr [edi] == 0 )
    ; отправка текущего символа
    invoke send, hsock, edi, 1, 0
    ; следующий символ
    inc edi
    .ENDW
    ret
    Mys endp
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    протокол не смотрел, но разве все строки не надо завершать 13,10?
     
  3. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    вот чей-то подобный исходник.
    Странно не вижу кнопку прикрепить у себя. ЕЕ теперь нет у всех ?
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap :none
    4.  
    5. include \masm32\include\windows.inc
    6.  
    7. include \masm32\include\masm32.inc
    8. include \masm32\include\kernel32.inc
    9. include \masm32\include\ws2_32.inc
    10. include \masm32\include\user32.inc
    11.  
    12. includelib \masm32\lib\masm32.lib
    13. includelib \masm32\lib\kernel32.lib
    14. includelib \masm32\lib\ws2_32.lib
    15. includelib \masm32\lib\user32.lib
    16.  
    17. .data
    18.     SOCKADDR STRUCT
    19.         sin_family    WORD  ?
    20.         sin_port      WORD  ?
    21.         sin_addr      in_addr   <>
    22.         sin_zero      BYTE  8 dup (?)
    23.     SOCKADDR ENDS
    24.  
    25.     wsadata WSADATA <>
    26.     s_addr  SOCKADDR    <>
    27.     sock    dd  0
    28.     r_buf   db  512 dup(0)
    29.  
    30. ;--------------------------------------------------
    31.     s_helo  db "HELO EHLO",0dh,0ah
    32.     szhelo  equ $ - offset s_helo
    33.  
    34.     s_from  db "MAIL FROM:<111@mail.ru>",0dh,0ah; ------------- сменить
    35.     szfrom  equ $ - offset s_from
    36.  
    37.     s_to    db "RCPT TO: <222@e-mail.ru>",0dh,0ah; ------------- сменить
    38.     szto    equ $ - offset s_to                
    39.  
    40.     s_data  db "DATA",0dh,0ah
    41.     szdata  equ $ - offset s_data
    42.  
    43.     s_headers   db "TO: 222@e-mail.ru",0dh,0ah
    44.             db "Subject: smtp",0dh,0ah
    45.         db "FROM: 111@mail.ru",0dh,0ah
    46.  
    47.     s_body  db "My first mail.",0dh,0ah
    48.             db 0dh,0ah,".",0dh,0ah
    49.  
    50.     szbody  equ $ - offset s_body
    51.  
    52.  
    53.     szheaders   equ $ - offset s_headers
    54.     s_quit  db "QUIT",0dh,0ah
    55.     szquit  equ $ - s_quit
    56.  
    57.  
    58.     crlf    db 13,10,0
    59.     ;IP db "199.149.62.15",0    ; www.e-mail.ru
    60.     ;IP db "195.161.118.50",0   ; www.e-mail.ru
    61.     ;IP db "194.67.23.111",0    ; www.mail.ru
    62.     IP  db 20 dup(0)
    63.  
    64. .data?
    65. .code
    66. ;----------------------------------------------------------------
    67. start:
    68.  
    69.     invoke  GetCL,1,ADDR IP
    70.     .if eax != 1
    71.         ret
    72.     .endif
    73.  
    74.  
    75.     invoke  WSAStartup,101h,offset wsadata
    76.  
    77.  
    78.     invoke  socket,AF_INET,SOCK_STREAM,0
    79.     mov sock,eax
    80.     mov s_addr.sin_family,AF_INET
    81.     invoke  htons,25
    82.     mov s_addr.sin_port,ax
    83.     invoke  inet_addr,ADDR  IP
    84.     mov s_addr.sin_addr,eax
    85.  
    86.  
    87.     invoke  connect,sock,addr s_addr,sizeof s_addr
    88.     invoke  recv,sock,addr r_buf,512,0
    89.  
    90.  
    91.     invoke  send,sock,addr s_helo,szhelo,0
    92.     call    recvlp
    93.     ;invoke StdOut,ADDR crlf
    94.  
    95.  
    96.  
    97.     invoke  send,sock,addr s_from,szfrom,0
    98.     call    recvlp
    99.     ;invoke StdOut,ADDR crlf
    100.  
    101.  
    102.  
    103.     invoke  send,sock,addr s_to,szto,0
    104.     call    recvlp
    105.     ;invoke StdOut,ADDR crlf
    106.  
    107.  
    108.  
    109.     invoke  send,sock,addr s_data,szdata,0
    110.     call    recvlp
    111.     ;invoke StdOut,ADDR crlf
    112.  
    113.  
    114.  
    115.     invoke  send,sock,addr s_headers,szheaders,0
    116.     call    recvlp
    117.     ;invoke StdOut,ADDR crlf
    118.  
    119.  
    120.     invoke  send,sock,addr s_quit,szquit,0
    121.     call recvlp
    122.     ;invoke StdOut,ADDR crlf
    123.  
    124.     invoke closesocket,sock
    125.     invoke WSACleanup
    126.     ;invoke ExitProcess,0
    127.         ret
    128.  
    129.     ;------------CLEAR BUFFER------------
    130. clear:
    131.         mov ecx,512
    132.         lea edi,offset r_buf
    133.     r:
    134.     mov byte ptr [edi],00h
    135.         inc edi
    136.         loop r
    137.  
    138.         ;mov byte ptr [r_buf+512],0
    139.         ret
    140.     ;------------------------------------
    141.     ;------------------------------------
    142. recvlp:
    143.     invoke  recv,sock,addr r_buf,512,0
    144.     .IF EAX!=SOCKET_ERROR
    145. ;INT 3
    146.         invoke StdOut,ADDR r_buf
    147.     .ENDIF
    148.     call clear
    149.         ret
    150.     ;------------------------------------
    151.     ;------------------------------------
    152.  
    153. end start
     
  4. tester3000

    tester3000 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2006
    Сообщения:
    140
    MSoft правильно сказал надо CRLF в конце добавлять а в самой последней строчке хидера их два если надо могу пример отправка с аттачем на fasm скинуть