Quirk Napisano Luty 24, 2019 Autor Zgłoś Udostępnij Napisano Luty 24, 2019 procedure SendMail; type zawartosc=array[1..57] of char; var WSAData:TWSAData; sock,i:integer; sa:tsockaddrin; wiadomosc:string[100]; zalacznik:file of char; linia:zawartosc; zrobiono,zrobione:longword; function odbierz(s:integer):pchar; var buf:array[0..99] of char; begin recv(s,buf,sizeof(buf),0); result:=buf; end; procedure wyslij(s:integer;co:string); var buf:array[0..99] of char; j:byte; begin fillchar(buf,100,0); for j:=1 to length(co) do begin buf[j-1]:=co[j]; end; send(s,buf,sizeof(buf),0); end; begin WSAStartup(makeword(2,0),WSAData); sock:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if sock=INVALID_SOCKET then begin end; if SOCKET_ERROR=WSAAsyncSelect(sock,xMainWnd,WM_USER+1,FD_CONNECT or FD_READ or FD_WRITE) then begin end; sa.sin_family:=AF_INET; sa.sin_port:=htons(25); sa.sin_addr.s_addr:=inet_addr(PChar('212.126.20.60')); bind(sock,sa,sizeof(sa)); connect(sock,sa,sizeof(sa)); wiadomosc:=odbierz(sock); // 250 ... wyslij(sock,'EHLO smtp.o2.pl'); wiadomosc:=odbierz(sock); // 250 ... wyslij(sock,'MAIL From:<'+mailod+'>'); wiadomosc:=odbierz(sock); // 250 ... wyslij(sock,'RCPT To:<'+mail+'>'); wiadomosc:=odbierz(sock); // 250 ... wyslij(sock,'DATA'); wiadomosc:=odbierz(sock); // 354 ... wyslij(sock,'From: <'+mailod+'>'); wyslij(sock,'To: <'+mail+'>'); wyslij(sock,'subject: temat'); wyslij(sock,'MIME-Version: 1.0'); wyslij(sock,'Content-Type: multipart/mixed; boundary="gc0p4Jq0M2Yt08jU534c0p"'); wyslij(sock,'This is a multi-part message in MIME format...'); wyslij(sock,'--gc0p4Jq0M2Yt08jU534c0p'); wyslij(sock,'Content-Type: text/plain'); wyslij(sock,'Content-Disposition: inline'); wyslij(sock,''); wyslij(sock,'INFO'); wyslij(sock,'--gc0p4Jq0M2Yt08jU534c0p'); wyslij(sock,'Content-Type: application/octream; name="1.txt"'); wyslij(sock,'Content-Transfer-Encoding: base64'); wyslij(sock,'Content-Disposition: attachement; filename="1.txt"'); wyslij(sock,''); AssignFile(zalacznik,'c:\1.txt'); Reset(zalacznik); zrobiono:=filesize(zalacznik); repeat Blockread(zalacznik,linia,SizeOf(linia),zrobione); wyslij(sock,Base64Encode(linia)); zrobiono:=zrobiono-zrobione; until zrobiono=0; CloseFile(zalacznik); wyslij(sock,''); wyslij(sock,''); // End of Header wyslij(sock,'.'); // end of mail wiadomosc:=odbierz(sock); // 250 ... wyslij(sock,'QUIT'); wiadomosc:=odbierz(sock); // 250 ... closesocket(sock); WSACleanup; end; Mam oto taki powyzszy kod i niby wszystko jest OK, bledow nie wywala, kompiluje sie i laczy, ale po odebraniu pierwszej wiadomosci od serwera gdy cos wysle i probuje odebrac nastepna zamiast standardowej odpowiedzi otrzymuje jakby fragment tego co przed chwila wysylalem a na po kilku takich operacjach 'wiadomosc' jest pusta. Co jest zle i jak to przerobic zeby dzialalo? Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Freak Napisano Luty 24, 2019 Zgłoś Udostępnij Napisano Luty 24, 2019 wyslij(sock,'EHLO smtp.o2.pl'); Chyba powinno być HELO a nie EHLO :) Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Quirk Napisano Luty 24, 2019 Autor Zgłoś Udostępnij Napisano Luty 24, 2019 zgodnie z dokumentami rfc moze byc zarowno HELO (starsza wersja) jak i EHLO (nowsza wersja) Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.