Народ, помогите найти в моей маленькой програмульке баг, все перепробовал, но не пашет. Прога должна отправить мне на мыло строку "Ху*ло Ексель!", но увы никак немогу разобраться в чем дело ;-((( Вопрос как вы уже заметили по цокетам и smtp. И подскажите как реализовать к этому поддержку аттачей, и чтоб все работало.. Зараннее благодарен... _927225716__smtp_send.asm
Так, на вскидку не "EHLO TOVARISCH!", а "HELO TOVARISCH!" это из rfc. По поводу атачей когда-то, очень давно мыло было только текстовое и передача файлов не закладывалась, поэтому сейчас файлы перекодируют в "текст", используя base64 напрмер и в теле сообщения посылают "текст" приложенного атача. Если хочешь разобраться - читай rfc по smtp.
Спасибо что подкоректил, но про проблема все равно не решаеться, даже незнаю что еще тут не-то. Я смотрел сырцы мейлеров, но там довольно громоздко и невсе у меня компиляться... Тут самый короткий и наглядный способ, и я хочу чтобы оно работало, если с этим неполучиться то тогда куда мне браться за более серьезные вещи, так что тема продолжаеться, и я выкладую листинг тутже, чтоб сразу было все видно... Я тут тоже немного потправил, там было вместо invoke send,sock,addr s_headers,szheaders,0 invoke send,sock,addr s_headers,siseof szheaders,0 ;-----------------SMTP----------------------------------- .386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc ;include \masm32\include\masm32.inc include \masm32\include\kernel32.inc include \masm32\include\ws2_32.inc ;wsock32.inc include \masm32\include\user32.inc includelib \masm32\lib\kernel32.lib ;includelib \masm32\lib\wininet.lib includelib \masm32\lib\ws2_32.lib ;wsock32.lib includelib \masm32\lib\user32.lib .data ;Какогото хера у меня этой структуры в масме v6 нету хм, жаль... ;SOCKADDR STRUC ;sin_family dw AF_INET ;port dw 0 ;IP dd 0 ; dq 0 ;SOCKADDR ENDS SOCKADDR STRUCT sin_family WORD ? sin_port WORD ? sin_addr in_addr <> sin_zero BYTE 8 dup (?) SOCKADDR ENDS wsadata WSADATA <> s_addr SOCKADDR <> sock dd 0 ;сакет r_buf db 512 dup(0) ; Для приёма данных server db "smtp.yandex.ru",0 ;--------------------------------------------------------------------- -- s_helo db "HELO",0dh,0ah,0 szhelo equ $ - offset s_helo s_from db "MAIL FROM:<tech-help2004@yandex.ru>",0dh,0ah,0 szfrom equ $ - offset s_from s_to db "RCPT TO:<ganes@yandex.ru>",0dh,0ah,0 szto equ $ - offset s_to s_data db "DATA",0dh,0ah,0 szdata equ $ - offset s_data s_headers db "Subject: HELLO!",0dh,0ah msg db "HELLO NETworD!!!",0dh,0ah db 0dh,0ah,".",0dh,0ah,0 szheaders equ $ - offset s_headers s_quit db "QUIT",0dh,0ah,0 szquit equ $-s_quit ;--------------------------------------------------------------------- -- msg_connect db "CONNECTED SUCCESFULLY!",0 msg_connect2 db "MSG!",0 .code start: ;инициализация invoke WSAStartup,101h,offset wsadata ;этот сокет invoke socket,AF_INET,SOCK_STREAM,0 mov sock,eax mov s_addr.sin_family,AF_INET ;конектюсь на этот порт invoke htons,25 mov s_addr.sin_port,ax ;перевод с ASCII в Hex :*) invoke gethostbyname,offset server mov eax,dword ptr [eax+12] ;HOSTENT_IP EQU 12 (указатель на IP) mov eax,dword ptr [eax] ;в еакс его! mov eax,dword ptr [eax] mov s_addr.sin_addr,eax ;<-сюда его .WHILE TRUE ;мотать длинный круг ;Подключаюся к церверу... invoke connect,sock,offset s_addr,sizeof s_addr cmp eax,0 ;подкониктилось? имхо "0" - все ОК je yez .ENDW yez: .IF EAX==0 invoke MessageBox,0,addr msg_connect,addr msg_connect2,MB_OK .ENDIF ;поздоровкатся invoke send,sock,addr s_helo,szhelo,0 ; invoke recv,sock,addr r_buf,512,0 ;от кого: invoke send,sock,addr s_from,szfrom,0 ; invoke recv,sock,addr r_buf,512,0 ;кому: invoke send,sock,addr s_to,szto,0 ; invoke recv,sock,addr r_buf,512,0 ;начало данных ну и тела письма: invoke send,sock,addr s_data,szdata,0 ; invoke recv,sock,addr r_buf,512,0 ;заголовок+письмо invoke send,sock,addr s_headers,szheaders,0 ; invoke recv,sock,addr r_buf,512,0 ;прощание с цервером: invoke send,sock,addr s_quit,szquit,0 ; invoke recv,sock,addr r_buf,512,0 ;закрыть сакет и зарезирвированую под него память invoke closesocket,sock ;ДеИнициализация всей этой лабуды invoke WSACleanup ;Хаппи ЕРРОР ЕНД! invoke ExitProcess,0 end start ;---------------------CUT HERE------------------------- 1977819925__smtp_.zip
ganes, слей последний MASM v8 с этого сайта и все должно компилиться и т.д. И кстати без аутентификации на smtp-сервере довольно сложно будет тебе что-то отправить...
ganes,почитай здесь по всем своим вопросам: 1. http://www.wasm.ru/forum/index.php?action=vthread&forum=12&topic=6338&page=0 2. смотри аттач (там готовый рабочий пример) 455876726__mailsend.zip
Привет всем! Уже все!!! исправил вроде... РАБОТАЕТ!!!! Я немного усовершенствовал чтоб процес общения с цервером был нагляднее, все мессаги появляються соответственно в мессагаБоксах (MessageBox(...)). Вот еще хотел спросить, мож кто знает и необлиниться написать насчет аттачей, точнее желательно чтоб сразу файла 2-3 отправлять можнобыло, и как это происходит т.е сцервер сам с моего компа файл скачает или надо слать ввиде мессаги как кто-тот уже говорил в кодировке base64. А то я тут разглядывакл один мейлер на форуме, и чото неполучаеться толком файлу присобачить, скажем если он находиться в папке с:\папкамоя\фотка.джиф Если ктось знает як то хелп.... Усовершенствованый смтп клиййент тута: _1534740533__smtp_release.zip
Код (Text): invoke gethostbyname,offset server mov eax,dword ptr [[b]eax[/b]+12] ;HOSTENT_IP EQU 12 (указатель на IP) ;Хаппи ЕРРОР ЕНД! Цо це таке? Ну не может память быть "read"
Насчет base64 посмотри здесь: 1.http://www.wasm.ru/forum/index.php?action=vthread&forum=12&topic=6338&page=0 2.http://www.wasm.ru/forum/index.php?action=vthread&topic=7447&forum=4&page=-1 будем ждать окончательного релиза...
Вот прога сама себя отправляет по указанному мылу. Либа с иходником в аттаче. ;------------------------------------ .486 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\Ws2_32.inc include lib.inc includelib \masm32\lib\Ws2_32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib lib.lib .data? wsadata WSADATA <> pMessage dd ? szCMDBuff db 300 dup (?) .data szMessageText db " H e l l o ! ! ! ))) ",0dh,0ah,0dh,0ah,0 szAttach db "Readme.doc",0 szSubjct db "Subject: Hello Boy!!!",0 szfrom db "moimil@mail.com",0 szto db "tvoimil@mail.com",0 .code start: invoke GetModuleFileName, 0, addr szCMDBuff, 300 invoke WSAStartup, 202h, addr wsadata invoke initlib invoke AssemleMesage, addr szfrom, addr szto, addr szCMDBuff, addr szAttach, addr szMessageText, addr pMessage invoke EmailSender, addr szfrom, addr szto, addr szSubjct, pMessage invoke ExitProcess, 0 end start ;----------------------------------------- 1027282842__mail.rar
Пасибки "Воване" Но мне больше интересен вопрос насчет составления свего смтпишного хедера вручную, где можно это все реализовать и чтоб сразу пару файлов отослить мона было. Все перекопал, нигде инфы нету, и большинство толком незнает як..:-(((
Доброво времени суток все! Я вот в и-нете откопал инфу насчет нескольких аттачей, вот: ;---------------------------------------------------------s_helo db "HELO EHLO",0dh,0ah szhelo equ $ - offset s_helo s_from db "MAIL FROM:<tech_help@mail.ru>",0dh,0ah szfrom equ $ - offset s_from s_to db "RCPT TO: <donjuane@mail.ru>",0dh,0ah szto equ $ - offset s_to s_data db "DATA",0dh,0ah szdata equ $ - offset s_data s_headers db "TO: donjuane@mail.ru",0dh,0ah db "Subject: NeWWW2",0dh,0ah db "FROM: tech_help@mail.ru",0dh,0ah ;----------------------------------|\ db "Content-Type: multipart/mixed; boundary=",022h,"next",022h,0dh,0ah,0dh,0ah ;----------------------------------|/ db "--next",0dh,0ah db "Content-Type: application/octet-stream",0dh,0ah ;db "Content-Transfer-Encoding: base64",13,10 db "Content-Disposition: attachment; filename=",022h,"qwfile.com",022h,0dh,0ah,0dh,0ah ;file body db "12345-fuckoff/на русском бл*я!",0dh,0ah,0dh,0ah db "--next",0dh,0ah db "Content-Type: application/octet-stream",0dh,0ah ;db "Content-Transfer-Encoding: base64",13,10 db "Content-Disposition: attachment; filename=",022h,"qwfile2.doc",022h,0dh,0ah,0dh,0ah ;file body db "This is a body of file!",0b3h,0dh,0ah,0dh,0ah ;------------------------------|\ db "--next",0dh,0ah,0dh,0ah ;тело письма s_body db "Assembler - Simple & Pure!",0dh,0ah db "Thanks to WASM.Ru forum and all COdeRzzz...",0dh,0ah db 0dh,0ah,".",0dh,0ah ;------------------------------|/ szbody equ $ - offset s_body szheaders equ $ - offset s_headers s_quit db "QUIT",0dh,0ah szquit equ $ - s_quit ;--------------------------------------------------------- Тут прикол в том, что надо вначале написать что наша мессага будет состоять из кусков, и назначить имя для разделения этих кусков, ну думаю разберетесь... _481945423__smtp_release.zip
Вчера вот целый день искал, и немогу понять как отправить одно письмо сразу нескольким адресатам? Мож кто знает??? Что мне надо подправить для этого в заголовках?
Сенкс Stub! Я и недумал что ОутГлюк еще и такие вещи может моказать, Мелкософт все предусмотрел )) Прикол оказался в повторениии команды "RCPT TO: <mail@host.ru>" ну а также вроде катит и эти команды: (проживающие в районе 'DATA') "CC: ml@host.ru" "BCC: ml@host.ru"