собственно сабж: хочу отправить письмо используюя только средства windows. набросал отправку письма на winsock: [cut] Code: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,winsock, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Button2: TButton; Memo2: TMemo; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} {ðåàëèçàöèÿ base64 àëãîðèòìà äëÿ ñòðîê. íå ìîÿ - âçÿë ñ torry.net} const B64Table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; function Base64Encode(const S: string): string; var InBuf: array[0..2] of Byte; OutBuf: array[0..3] of Char; iI, iJ: Integer; begin SetLength(Result, ((Length(S) + 2) div 3) * 4); for iI := 1 to ((Length(S) + 2) div 3) do begin if Length(S) < (iI * 3) then Move(S[(iI - 1) * 3 + 1], InBuf, Length(S) - (iI - 1) * 3) else Move(S[(iI - 1) * 3 + 1], InBuf, 3); OutBuf[0] := B64Table[((InBuf[0] and $FC) shr 2) + 1]; OutBuf[1] := B64Table[(((InBuf[0] and $3) shl 4) or ((InBuf[1] and $F0) shr 4)) + 1]; OutBuf[2] := B64Table[(((InBuf[1] and $F) shl 2) or ((InBuf[2] and $C0) shr 6)) + 1]; OutBuf[3] := B64Table[(InBuf[2] and $3F) + 1]; Move(OutBuf, Result[(iI - 1) * 4 + 1], 4); end; if Length(S) mod 3 = 1 then begin Result[Length(Result) - 1] := '='; Result[Length(Result)] := '='; end else if Length(S) mod 3 = 2 then Result[Length(Result)] := '='; end; {ðåàëèçàöèÿ base64 äëÿ ôàéëîâ. âçÿë ñ ñîðöôîðæà ñîðöû êîäèðîâøùèêà} procedure encode_f(filename:string); var input : Array[0..2] of byte; var mid : Array[0..5] of byte; var values : Array[0..3] of byte; var output : Array[0..3] of char; var b : byte; var i : integer; var fileop : File of byte; var fileex : File of char; var pad : integer; var s : string; var c : char; var l : integer; const CRLF : String = #13#10; begin System.Assign(fileop, filename); {$I-} System.Reset(fileop); {$I+} s := '.b64'; System.Assign(fileex, filename + s); {$I-} System.Rewrite(fileex); {$I+} while not System.Eof(fileop) do begin { read 3 bytes from input file } i := 0; while (i < 3) and (not System.Eof(fileop)) do begin System.Read(fileop, b); input[i] := b; i := i + 1 end; { Don't know if this is correct, but it seems to work } if i = 1 then begin { Couldn't get full array from file before end } input[1] := $00; input[2] := $00; pad := 2; end else if i = 2 then begin input[2] := $00; pad := 1; end; { [XXXXXXXX, XXXXXXXX, XXXXXXXX] } { [XXXXXX-XX, XXXX-XXXX, XX-XXXXXX] } mid[0] := input[0] shr 2; { from XXXXXXXX to 00XXXXXX } mid[1] := (input[0] shl 4) and $30; { from XXXXXXXX to XXXX0000 to 00XX0000 } mid[2] := input[1] shr 4; { from XXXXXXXX to 0000XXXX } mid[3] := (input[1] shl 2) and $3c; { from XXXXXXXX to XXXXXX00 to 00XXXX00 } mid[4] := input[2] shr 6; { from XXXXXXXX to 000000XX } mid[5] := input[2] and $3f; { from XXXXXXXX to 00XXXXXX } { [00XXXXXX, 00XXXXXX, 00XXXXXX, 00XXXXXX] } values[0] := mid[0]; values[1] := mid[1] or mid[2]; values[2] := mid[3] or mid[4]; values[3] := mid[5]; { switch bytes to get char values } for i := 0 to 3 do begin case values[i] of 0..25 : output[i] := char(byte('A') + values[i]); 26..51 : output[i] := char(byte('a') + (values[i] - 26)); 52..61 : output[i] := char(byte('0') + (values[i] - 52)); 62 : output[i] := '+'; 63 : output[i] := '/'; end; end; { write output } for i := 0 to 3 do begin l := l + 1; if l > 76 then begin { The base64 standard defines a line break here as \r\n } c := #13; System.Write(fileex, c); c := #10; System.Write(fileex, c); l := 1; end; System.Write(fileex, output[i]); end; end; { close input file } System.Close(fileop); { add padding to output } { BUG ALERT: if the lenhth of the line is 0 or 1 then the padding will only eat the \r\n. It will be fixed... eventually. } if pad > 0 then begin System.Seek(fileex, System.filePos(fileex) - pad); for i := 1 to pad do begin c := '='; System.Write(fileex, c); end; end; { close output file and exit } System.Close(fileex); end; function GetComputerNetName: string; {îïðåäåëåíèå èìåíè êîìïà} var buffer: array[0..255] of char; size: dword; begin size := 256; if GetComputerName(buffer, size) then Result := buffer else Result := '' end; procedure TForm1.Button1Click(Sender: TObject); var s:tsocket; sa:sockaddr_in; h:phostent; sendbuf,recvbuf:array[0..4095] of char; b64:file; res:integer; buf:string; begin s:=socket(af_inet,sock_stream,0);//ñîçäàåì ñîêåò //çàïîëíÿåì ñòðóêòóðó àäðåñà sa.sin_family:=af_inet; sa.sin_port:=htons(25); h:=gethostbyname('smtp.mail.ru'); sa.sin_addr:=PInaddr(h^.h_addr^)^; connect(s,sa,sizeof(sa));//êîííåêò fillchar(sendbuf,4096,0); lstrcpy(sendbuf,'EHLO ') ;//ñîáèðàåì ïðèâåòñòâèå lstrcat(sendbuf,pchar(getcomputernetname)); lstrcat(sendbuf,#13#10); send(s,sendbuf[0],lstrlen(sendbuf),0);//ïîñûëàåì ïðèâåòñòâèå memo1.Lines.Add(sendbuf); fillchar(recvbuf,4096,0); recv(s,recvbuf[0],4096,0); //ïîëó÷àåì îòâåò memo1.Lines.Add(recvbuf); fillchar(recvbuf,4096,0); recv(s,recvbuf[0],4096,0); //ïîñëå ïðèâåòñòâèÿ ñåðâåð äîëæåí ïîñëàòü ñïèñîê ïîääåðæèâàåìûõ ìåòîäîâ è ïàðàìåòðû memo1.Lines.Add(recvbuf); fillchar(sendbuf,4096,0); lstrcpy(sendbuf,'AUTH PLAIN'#13#10);//àâòîðèçóåìñÿ ìåòîäîì plain send(s,sendbuf[0],lstrlen(sendbuf),0); memo1.Lines.Add(sendbuf); fillchar(recvbuf,4096,0); recv(s,recvbuf[0],4096,0); //ïîëó÷àåì îòâåò memo1.Lines.Add(recvbuf); if strtoint(copy(recvbuf,1,3))<>334 then//åñëè ñåðâåð æäåò îò íàñ ëîãèí è ïàðîëü - îí ïîøëåò êîä 334, åñëè ïðèñëàë äðóãîé êîä - ïðîèçîøëà îøèáêà begin showmessage('èçâèíèòå, íî ïðîèçîøåë îáëîì(('); closesocket(s); exit; end; fillchar(sendbuf,4096,0); lstrcpy(sendbuf,pchar(base64encode(#00'v.v*v***'#00'*******')));//àâòîðèçóåìñÿ ìåòîäîì plain lstrcat(sendbuf,#13#10); send(s,sendbuf[0],lstrlen(sendbuf),0); memo1.Lines.Add(sendbuf); fillchar(recvbuf,4096,0); recv(s,recvbuf[0],4096,0); //ïîëó÷àåì îòâåò memo1.Lines.Add(recvbuf); fillchar(sendbuf,4096,0); lstrcpy(sendbuf,'MAIL FROM:<v****@mail.ru>'#13#10);//îò êîãî send(s,sendbuf[0],lstrlen(sendbuf),0); memo1.Lines.Add(sendbuf); fillchar(recvbuf,4096,0); recv(s,recvbuf[0],4096,0); //ïîëó÷àåì îòâåò memo1.Lines.Add(recvbuf); fillchar(sendbuf,4096,0); lstrcpy(sendbuf,'RCPT TO:<v******@mail.ru>'#13#10);//êîìó send(s,sendbuf[0],lstrlen(sendbuf),0); memo1.Lines.Add(sendbuf); fillchar(recvbuf,4096,0); recv(s,recvbuf[0],4096,0); //ïîëó÷àåì îòâåò memo1.Lines.Add(recvbuf); fillchar(sendbuf,4096,0); lstrcpy(sendbuf,'DATA'#13#10);//íà÷èíàåì ïîñûëàòü ïèñüìî send(s,sendbuf[0],lstrlen(sendbuf),0); memo1.Lines.Add(sendbuf); fillchar(recvbuf,4096,0); recv(s,recvbuf[0],4096,0); //ïîëó÷àåì îòâåò memo1.Lines.Add(recvbuf); if strtoint(copy(recvbuf,1,3))<>354 then//åñëè ñåðâåð æäåò îò íàñ òåêñò ïèñüìà - îí ïîøëåò êîä 354, åñëè ïðèñëàë äðóãîé êîä - ïðîèçîøëà îøèáêà begin showmessage('èçâèíèòå, íî ïðîèçîøåë îáëîì(('); closesocket(s); exit; end; fillchar(sendbuf,4096,0); {ñîñòàâëÿåì rfc ïèñüìà} lstrcpy(sendbuf,'To: v.vov******'#13#10);//êîìó lstrcat(sendbuf,'From: vova <v.vov******>'#13#10);//îò êîãî lstrcat(sendbuf,'Subject: lol'#13#10);//òåìà lstrcat(sendbuf,'MIME-Version: 1.0'#13#10 ); // Âåðñèÿ MIME lstrcat(sendbuf,'Content-Type: multipart/mixed;'#13#10); // Òèï ñîäåðæèìîãî lstrcat(sendbuf,' boundary="----------E9F73DF8FFBD3"'#13#10#13#10); // Ðàçäåëèòåëü lstrcat(sendbuf,'__text_oll__'#13#10);//òåêñò ïèñüìà lstrcat(sendbuf,'------------E9F73DF8FFBD3'#13#10);//ðàçäåëèòåëü è çà íèì íà÷àëî ôàéëà lstrcat(sendbuf,'Content-Type: application/octet-stream;'#13#10); lstrcat(sendbuf,' name="all_com.cpp"'#13#10);//èìÿ lstrcat(sendbuf,'Content-transfer-encoding: base64'#13#10);//êîäèðîâàíèå lstrcat(sendbuf,'Content-Disposition: attachment;'#13#10); lstrcat(sendbuf,' filename="all_com.cpp"'#13#10);//åùå ðàç èìÿ send(s,sendbuf[0],lstrlen(sendbuf),0); memo1.Lines.Add(sendbuf); {äàëüøå èäåò çàêîäåíûé â base64 ôàéë} encode_f('all_com.cpp'); memo2.Lines.LoadFromFile('all_com.cpp.b64'); memo1.Text:=memo1.Text+memo2.Text; buf:=memo2.text; send(s,buf[1],length(buf),0); fillchar(sendbuf,4096,0); lstrcpy(sendbuf,'------------E9F73DF8FFBD3'#13#10'.'#13#10);//çàêàí÷èâàåì send(s,sendbuf,lstrlen(sendbuf),0); memo1.Lines.Add(sendbuf); fillchar(recvbuf,4096,0); recv(s,recvbuf[0],4096,0); //ïîëó÷àåì îòâåò memo1.Lines.Add(recvbuf); fillchar(sendbuf,4096,0); lstrcpy(sendbuf,'RSET'#13#10);//ñáðàñûâàåì (âîçâðàùàåìñÿ ê ïåðâîìó ýòàïó) send(s,sendbuf[0],lstrlen(sendbuf),0); memo1.Lines.Add(sendbuf); fillchar(recvbuf,4096,0); recv(s,recvbuf[0],4096,0); //ïîëó÷àåì îòâåò memo1.Lines.Add(recvbuf); fillchar(sendbuf,4096,0); lstrcpy(sendbuf,'QUIT'#13#10);//Âûõîäèì send(s,sendbuf[0],lstrlen(sendbuf),0); memo1.Lines.Add(sendbuf); fillchar(recvbuf,4096,0); recv(s,recvbuf[0],4096,0); //ïîëó÷àåì îòâåò memo1.Lines.Add(recvbuf); closesocket(s); end; procedure TForm1.Button2Click(Sender: TObject); var w:wsadata; begin wsastartup(makeword(2,2),w);//èíèò âèíñîêà end; end. к письму прикладываю файл исходника на си++. письмо приходит и видиться как бы с вложением, но размер вложения == -1 и при сохранении на диск==0. вот лог отправки Code: EHLO DNAPC 220 smtp11.mail.ru ESMTP ready 250-smtp11.mail.ru 250-SIZE 31457280 250-8BITMIME 250-AUTH PLAIN LOGIN 250 STARTTLS AUTH PLAIN 334 AHYudm92YTE1******2piYzl= 235 Authentication succeeded MAIL FROM:<*****@mail.ru> 250 OK RCPT TO:<*****@mail.ru> 250 Accepted DATA 354 Enter message, ending with "." on a line by itself To: ******@mail.ru From: vova <v******@mail.ru> Subject: lol MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----------E9F73DF8FFBD3" __text_oll__ ------------E9F73DF8FFBD3 Content-Type: application/octet-stream; name="all_com.cpp" Content-transfer-encoding: base64 Content-Disposition: attachment; filename="all_com.cpp" I2luY2x1ZGUgPGlvc3RyZWFtPg0KI2luY2x1ZGUgPGlvbW FuaXA+DQojaW5jbHVkZSA8ZnN0cmVhbT4NCnVzaW5nIG5hbWVzcGFjZSBzdGQ7DQoNCi8vz/Du4u Xw/+XyIO/l8OXk5e3t7uUg4iD08+3q9uj+IPfo8evuIP3r5ezl7fLu4iBtDQovL+Xx6+ggbSDt5e ru8PDl6vLt7iDo6+gg5uUg7+Ds//L8IOL75OXr6PL8IO3lIPPg6+7x/A0KLy/08+3q9uj/IOjn4u X54OXyIO7hIP3y7uwNCi8v5fHoIOLxuCDu6iDv7uQg8fLw7uroIGFyciDi++Tl6//l8vH/IO/g7P /y/CDoIOIgbiD36PHr7iDx8vDu6iANCmludCAqKiBhbGxvY01lbW9yeUZvck1hdHJpeChkb3VibG UgbSwgaW50ICoqIGFyciwgaW50ICZuKQ0KeyANCglpZiAobSA8IDEgfHwgbSAhPSAoaW50KW0gfH wgSU5UX01BWCA8IG0pLy/v8O7i5fDq4CDq7vDw5ery7e7x8ugg7+Dw4Ozl8vDu4iANCgkJY291dD w8Ik5ldmVybmF5YSB2ZWxpY2hpbmEgblxuIjsvL+Xx6+gg7+Dw4Ozl8vD7IO3l6u7w8OXq8u375S CXIOLi7uTo7CDx7u7y4uXy8fLi8/755eUg8e7u4fnl7ejlDQoJZWxzZS8v5fHr6CDv4PDg7OXy8P sg7e7w7ODr/O375S4uLg0KCXsNCgkJdHJ5Ly/v8O7h8+XsIOL75OXr6PL8IO/g7P/y/A0KCQl7DQ oJCQlpZighKGFycj1uZXcgaW50ICpbKG4gPSBpbnQobSkpXSkpLy/l8evoIO3lIPPk4Ovu8fwg4v vk5evo8vwg7+Ds//L8DQoJCQkJY291dDw8Ik5ldmVybmF5YSB2ZWxpY2hpbmEgblxuIjsvL+L74u 7k6Owg8e7u4fnl7ejlDQoJCQllbHNlDQoJCQkJbiA9IGludChtKTsvL+/w6PHi4Oji4OXsIO/l8O Xs5e3t7ukgbiwg7+Xw5eTg7e3u6SDv7iDx8fvr6uUsIOru6+j35fHy4u4g8fLw7uoNCgkJfQ0KCQ ljYXRjaCAoYmFkX2FsbG9jICYpIC8v4iDx6/P34OUg6PHq6/736PLl6/zt7ukg8ejy8+D26OggDQ oJCXsNCgkJCWFyciA9IE5VTEw7Ly/v8Ojx4uDo4uDl7CDv5fDl7OXt7e7pIGFyciDn7eD35e3o5S BudWxsDQoJCX0NCgkJaWYoYXJyID09IE5VTEwpLy/l8evoIGFycj09bnVsbCjv4Oz/8vwg7eUg4v vk5evo6+Dx/CkNCgkgICAgICAgIHsNCiAgICAgICAgICAgICAgICBjb3V0PDwiTmV2ZXJuYXlhIH ZlbGljaGluYSBuXG4iOy8v4vvi5eTl7CDx7u7y4uXy8fLi8/756OUg8e7u4fnl7ejlDQogICAgIC AgICAgICB9DQoJfQ0KCXJldHVybiBhcnI7Ly/i5fDt5ewg8+rg5+Dy5ev8IO3gIOzg8vDo9vMNCn 0NCi8vwiDn4OLo8ejs7vHy6CDu8iDv4PDg7OXy8OAgYkhhbmRJbnB1dCDr6OHuIOLi7uTo7CD96+ Xs5e3y+yDs4PLw6Pb7IOLw8/ft8/4gYkhhbmRJbnB1dCA9PSB0cnVlDQovL+vo4e4g9+jy4OXsIO j1IOjnIPTg6evgDQppbnQgKiogc2V0TWF0cml4RWxlbWVudHMoYm9vbCBiSGFuZElucHV0LCBpZn N0cmVhbSAmaWZzLCBpbnQgKiogYXJyLCBpbnQgbiwgYm9vbCAmYkNvcnJlY3QpDQp7DQoJaW50IG ksIGo7Ly/k6/8g9ujq6+7iDQoJZm9yKGkgPSAwOyBpIDwgbiAmJiBiQ29ycmVjdDsgaSsrKfHy8O 7q6A0KCXsNCgkJYXJyW2ldID0gbmV3IGludFtuXTsvL+L75OXr/+XsIO/g7P/y/CDv7uQg8uXq8/ nz/iDx8vDu6vMNCgkJZm9yKGogPSAwOyBqIDwgbiAmJiBiQ29ycmVjdDsgaisrKS8v9+jy4OXsIP Hy8O7q8w0KCQl7DQoJCQlpZihiSGFuZElucHV0KS8v5fHr6CDi4u7k6Owg4vDz9+3z/iCXIPHv8O D46OLg5ewg8yDv7uv85+7i4PLl6/8NCgkJCXsNCgkJCQljb3V0PDwibWF0clsiPDxpICsgMTw8Il 1bIjw8aiArIDE8PCJdID0gIjsNCgkJCQljaW4+PmFycltpXVtqXTsNCgkJCX0NCgkJCWVsc2UvL+ Ig7/Du8uji7e7sIPHr8/fg5SCXIPfo8uDl7CDo5yD04Onr4A0KCQkJew0KCQkJCWlmKCFpZnMuZW 9mKCkpLy/l8evoIOrz8PHu8CDiIPTg6evlIO3lIOTu8fLo4yDq7u324A0KCQkJCQlpZnM+PmFycl tpXVtqXTsvL/fo8uDl7CDo5yD04Onr4A0KCQkJCWVsc2UvL+jt4PflDQoJCQkJCWJDb3JyZWN0ID 0gZmFsc2U7Ly/o5+Ll8fLo7CDu4SDu+Ojh6uUsIOfg7+jx4Owg4iDx7u7y4uXy8fLi8/758/4g7+ Xw5ezl7e3z/iDn7eD35e3o5Q0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiBhcnI7Ly/i5fDt5ewg8+ rg5+Dy5ev8IO3gIOfg7+7r7eXt7fvpIOzg8fHo4g0KfQ0KDQovL8Lu5+Lw4Png5fIg8fPs7PMg/e vl7OXt8u7iIO/u4e737e7pIOTo4OPu7eDr6CDxIO3g9+Dr7uwg4iBhcnJbcm93XVtjb2xdDQppbn QgZ2V0U3VtT2ZEaWFnb25hbChpbnQgcm93LCBpbnQgY29sLCBpbnQgbiwgaW50ICoqIGFycikNCn sNCglpbnQgaSxqLHN1bSA9IDA7DQoJaWYoY29sID09IDApLy/l8evoIPHy7uvh5fYg7fPr5eLu6Q 0KCXsNCgkJZm9yKGkgPSByb3c7IGkgPCBuOyBpKyspLy/v8O7n7uTo7CDu8iDz4+vgIOTuIPPj6+ Ag8err4OT74uD/IP3r5ezl7fL7DQoJCQlzdW0gKz0gYXJyW2ldW2kgLSAxXTsNCgl9DQoJZWxzZS 8v5fHr6CDt5fINCgl7DQoJCWZvcihqID0gY29sOyBqIDwgbjsgaisrKS8v7/Du9e7k6Owg7+4g5O jg4+7t4OvoKPHr5eTz/vno6SD96+Xs5e3yIOHz5OXyIO3o5uUg7eAgMSDoIO/w4OLl5SDt4CAxKQ 0KCQkJc3VtICs9IGFycltqIJcgMV1bal07Ly/x6uvg5Pvi4OXsIP3r5ezl7fL7DQoJfQ0KCXJldH VybiBzdW07Ly/i5fDt5ewg5+3g9+Xt6OUNCn0NCg0KaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKi Bhcmd2W10pDQp7DQoJaW50ICoqIG1hdHIgPSBOVUxMOy8v0+rg5+Dy5ev8IO3gIOzg8fHo4g0KCW ludCBpLGosbixtYXhfdmFsLGN1cl92YWw7DQoJZG91YmxlIG07DQoJYm9vbCBiQ29ycmVjdCA9IH RydWU7Ly/U6+DjIO7y4uX34P756Okg5+Ag6u7w8OXq8u3u8fL8IOLi7uTgDQoJaWZzdHJlYW0gaW ZzOy8vz+7y7uog5Ov/IPfy5e3o/w0KCS8vYXJndlswXSDi8eXj5OAg8e7k5fDm6PIg7/Py/CDqIP Hg7O7pIO/w7uPw4Ozs5Q0KCWlmKDEgPCBhcmdjKQ0KCXsNCgkJLy/P8O7h8+XsIO7y6vD78vwg5O v/IPfy5e3o/yDv5fDl5ODt7fvpIO/z8vwNCgkJaWZzLm9wZW4oYXJndlsxXSk7Ly/u8urw++Lg5e wg9ODp6w0KCQlpZighaWZzKS8v5fHr6CD04Onr4CDt5SDx8/nl4vHy4vPl8g0KCQl7DQoJCQljb3 V0PDwiT3NoaWJrYSBvdGtyaXRpYSA6ICI8PGFyZ3ZbMV08PCJcbiI7DQoJCQliQ29ycmVjdCA9IG ZhbHNlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJY291dDw8Ilx0Q2h0ZW5pZSBkYW5uaWggaXMgZm FpbGFcbiI7aWZzPj5tOw0KCQkJaWYoaWZzLmVvZigpKS8v5fHr6CDq8/Dx7vAg4iD04Onr5SDt5S Dk7vHy6OMg6u7t9uANCgkJCQljb3V0PDwiRmlsZSBuZSBzb2RlcnpoaXQgZWxlbWVudG92IG1hdH JpY2kgaWxpIHB1c3RcbiI7DQoJCQllbHNlDQoJCQl7DQoJCQkJaWYobWF0ciA9IGFsbG9jTWVtb3 J5Rm9yTWF0cml4KG0sIG1hdHIsIG4pKS8v4vvk5ev/5ewg7+Ds//L8DQoJCQkJCW1hdHIgPSBzZX RNYXRyaXhFbGVtZW50cyhmYWxzZSwgaWZzLCBtYXRyLCBuLCBiQ29ycmVjdCk7DQoJCQkJaWYoIW JDb3JyZWN0KS8v5fHr6CDt5SD14uDy4OXyIP3r5ezl7fLu4g0KCQkJCQljb3V0PDwiRmlsZSBkYW 5uaWggc29kZXJ6aGl0IG5lIHZzZSBlbGVtZW50aSBtYXRyaWNpXG4iOw0KCQkJCWVsc2UNCgkJCQ kJY291dDw8IkNodGVuaWUgb2tvbmNoZW5vLi4uXG4iOw0KCQkJfQ0KCQkJaWZzLmNsb3NlKCk7Ly /n4Orw+/Lo5SD04Onr4A0KCQl9DQoJfQ0KCWVsc2UNCgl7DQoJCWNvdXQ8PCJcdFJ5Y2hub2kgdn ZvZFxuIjsNCgkJd2hpbGUoIW1hdHIpLy8NCgkJew0KCQkJY291dDw8IkVudGVyIG4gOiAiO2Npbj 4+bTsNCgkJCW1hdHIgPSBhbGxvY01lbW9yeUZvck1hdHJpeChtLCBtYXRyLCBuKTsvL+L75OXr/+ XsIO/g7P/y/A0KCQl9DQoJCW1hdHIgPSBzZXRNYXRyaXhFbGVtZW50cyh0cnVlLCBpZnMsIG1hdH IsIG4sIGJDb3JyZWN0KTsNCgl9DQoJaWYoYkNvcnJlY3QpDQoJew0KCQljb3V0PDwiXHRWdm9kIG 1hdHJpY2kga29ycmVrdGVuIU90b2JyYXpoZW5pZSBtYXRyaWNpXG4iOw0KCQlmb3IoaSA9IDA7IG kgPCBuOyBpKyspDQoJCXsNCgkJCWZvcihqID0gMDsgaiA8IG47IGorKykNCgkJCQljb3V0PDxzZX R3KDMpPDxtYXRyW2ldW2pdPDwiICI7Ly/s6O3o7PPsIPLw6CDx6Ozi7uvgDQoJCQljb3V0PDwiXG 4iOw0KCQl9DQoJCWlmKG4gPT0gMSkvLyDl8evoIPDg5+zl8O3u8fL8IDENCgkJCW1heF92YWwgPS BtYXRyWzBdWzBdOy8v8u4g7ODq8SD98u4g4uLl5O3l++kg5evl7OXt8g0KCQllbHNlDQoJCS8v7+ 7r4OPg5ewgbWF4X3ZhbCDw4OLt7ukg8fPs7OUg/evl7OXt8u7iIDEt6Q0KCQkvL+/u4e737e7pIO To4OPu7eDr6CDv7uQg4+vg4u3u6Q0KCQltYXhfdmFsID0gZ2V0U3VtT2ZEaWFnb25hbCgxLCAwLC BuLCBtYXRyKTsNCgkJLy/F8evoIG4gPT0gMSDt6CDiIO7k6O0g6Ocg9ujq6+7iIO3lIOfg6eS47A 0KCQlmb3IoaSA9IDI7IGkgPCBuOyBpKyspDQoJCXsNCgkJCWlmKG1heF92YWwgPCAoY3VyX3ZhbC A9IGdldFN1bU9mRGlhZ29uYWwoaSwgMCwgbiwgbWF0cikpKQ0KCQkJCW1heF92YWwgPSBjdXJfdm FsOw0KCQl9DQoJCS8v8uXv5fD8IO/w7uHo8ODl7CDk6ODj7u3g6+gg4vv45SDj6+Di7e7pDQoJCW ZvcihqID0gMTsgaiA8IG47IGorKykNCgkJew0KCQkJaWYobWF4X3ZhbCA8IChjdXJfdmFsID0gZ2 V0U3VtT2ZEaWFnb25hbCgwLCBqLCBuLCBtYXRyKSkpDQoJCQkJbWF4X3ZhbCA9IGN1cl92YWw7DQ oJCX0NCgkJY291dDw8IlJlc3VsdCA6ICI8PG1heF92YWw8PCJcbiI7DQoJfQ0KCXN5c3RlbSgicG F1c2UiKTsNCglyZXR1cm4gMDsNCn0NCg== ------------E9F73DF8FFBD3 . 250 OK id=1RPZPx-0003MN-00 RSET 250 Reset OK QUIT 221 smtp11.mail.ru closing connection [/cut] текст в базе64 расшифровывается обратно как надо. подскажите почему не отправляется письмо? мож \r\n(#(13#10) где не доставил или лишних поставил?