Skocz do zawartości

Mail w socketach


Quirk

Recommended Posts

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?

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...