
22.10.2007, 20:51
|
|
Новичок
Регистрация: 20.10.2007
Сообщений: 5
Провел на форуме: 6515
Репутация:
0
|
|
Помогите с отправкой письма!
Проблема состоит не в шифровке данных с помощью base64. Нужен код на отправку письма с аттачментом через WinSock. Те примеры, что в инете валяются не работают
Вот вариант, который я использую. Посмотрите пожалуйста и скажите в чем трабл (как сделать так, чтобы Pupkin2 остался довольным  ):
Код:
uses WinSock
....
function LookupName(host: string): TInAddr;
var
HostEnt: PHostEnt;
InAddr: TInAddr;
begin
HostEnt := gethostbyname(PChar(host));
FillChar(InAddr, SizeOf(InAddr), 0);
if HostEnt <> nil then
begin
with InAddr, HostEnt^ do
begin
S_un_b.s_b1 := h_addr^[0];
S_un_b.s_b2 := h_addr^[1];
S_un_b.s_b3 := h_addr^[2];
S_un_b.s_b4 := h_addr^[3];
end;
end;
Result := InAddr;
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 SMTPSendString(MailSocket:TSocket;Str:string);
var
Buffer:Array[0..255] of char;
begin
StrPCopy(Buffer,Str);
Send(MailSocket,Buffer,length(Str),0);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
WSA:TWSAData;
MailSocket:TSocket;
SMTPServer:TSockAddr;
begin
WSAStartup(MAKEWORD(1,0),WSA);
MailSocket:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP );
ZeroMemory(@SMTPServer,SizeOf(SMTPServer));
SMTPServer.sin_family:=AF_INET;
SMTPServer.sin_port:=htons(25);
SMTPServer.sin_addr:=LookupName('smtp.mail.ru');
if Connect(MailSocket,SMTPServer,SizeOf(SMTPServer))= 0 then
begin
SMTPSendString(mailsocket,'HELO '+ GetComputerNetName + CTRLF);
SMTPSendString(mailsocket,'AUTH LOGIN ' + CTRLF + b64encode('Pupkin1') + CTRLF + b64encode('password') + CTRLF);
SMTPSendString(mailsocket,'MAIL FROM:' + 'Pupkin1@mail.ru' + CTRLF + 'RCPT TO:' + 'Pupkin2@mail.ru' + CTRLF);
SMTPSendString(mailsocket,'DATA' + CTRLF + 'From: "' + 'Pupkin1' + '" <' + 'Pupkin1@mail.ru' + '>' + CTRLF + 'To: "' + 'Pupkin2' + '" <' + 'Pupkin2@mail.ru' + '>' + CTRLF + 'Subject: ' + 'TESTING' + CTRLF);
SMTPSendString(mailsocket,'DONE!!!!'+CTRLF);
SMTPSendString(mailsocket,CTRLF+'.'+CTRLF+CTRLF+'QUIT');
end
else
ShowMessage('ERROR');
CloseSocket(MailSocket);
WSACleanup;
end;
Последний раз редактировалось <Zodiac>; 23.10.2007 в 00:07..
|
|
|