Quirk Napisano Luty 24, 2019 Autor Zgłoś 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
Freak Napisano Luty 24, 2019 Zgłoś Napisano Luty 24, 2019 wyslij(sock,'EHLO smtp.o2.pl'); Chyba powinno być HELO a nie EHLO :) Cytuj
Quirk Napisano Luty 24, 2019 Autor Zgłoś Napisano Luty 24, 2019 zgodnie z dokumentami rfc moze byc zarowno HELO (starsza wersja) jak i EHLO (nowsza wersja) Cytuj
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.