Форум: "WinAPI";
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];
ВнизE-Mail & Winsock. Найти похожие ветки
← →
BWG (2002-01-17 14:24) [9]Протестировал так:
program TestMail;
{$APPTYPE CONSOLE}
uses
SysUtils, Winsock, Windows;
function SendMail(const From: string; const Receiver: string; const Text: string;
const SmtpHost: string; SmtpPort: Word = 25): Boolean;
var
S: TSocket;
WSData: TWSAData;
function ConnectToSmtp: Boolean;
var
Sin: SockAddr_in;
IP: DWord;
He: PHostent;
begin
Result := false;
IP := inet_addr(PChar(SmtpHost));
if INADDR_NONE = IP then
begin
He := gethostbyname(PChar(SmtpHost));
if not Assigned(He) then
Exit;
IP := PDWord(PDWord(He^.h_addr_list)^)^;
writeln("IP is ",IP);
end;
S := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if INVALID_SOCKET <> S then
begin
FillChar(Sin, SizeOf(Sin), 0);
Sin.sin_family := AF_INET;
Sin.sin_port := htons(SmtpPort);
Sin.sin_addr.s_addr := IP;
Result := SOCKET_ERROR <> connect(S, Sin, SizeOf(Sin));
if Result then writeln("Connected ok");
if not Result then
closesocket(S);
end;
end;
function SendCommand(Text: string): Boolean;
var
Buffer: PChar;
Size: Integer;
begin
Text := Text + #13#10;
Size := Length(Text);
GetMem(Buffer, Size + 1);
try
StrCopy(Buffer, PChar(Text));
Result := send(S, Buffer^, Size, 0) <> SOCKET_ERROR;
writeln("command > ",text," > result > ",result);
finally
FreeMem(Buffer);
end;
end;
function ReceiveResponse: Integer;
var
Response: string;
C: Char;
begin
Result := 0;
Response := "";
repeat
if SOCKET_ERROR = recv(S, C, SizeOf(C), 0) then
begin
writeln("Socket error!");
Exit;
end;
Response := Response + C;
until C = #10;
if Pos(" ", Response) > 0 then
Result := StrToIntDef(Copy(Response, 1, Pos(" ", Response) - 1), 0)
else
Result := StrToIntDef(Response, 0);
writeln("Resp. result > ",result);
end;
begin
Result := false;
WSAStartup($0101, WSData);
try
if ConnectToSmtp then
try
ReceiveResponse;
//Result :=
SendCommand(#32+"helo msiers");// and (250 = ReceiveResponse) and
ReceiveResponse;
SendCommand("mail from: " + From);// and (250 = ReceiveResponse) and
ReceiveResponse;
SendCommand("rcpt to: " + Receiver);// and (250 = ReceiveResponse) and
ReceiveResponse;
SendCommand("data");// and (354 = ReceiveResponse) and
ReceiveResponse;
SendCommand(Text + #13#10+".");// and (250 = ReceiveResponse) and
ReceiveResponse;
SendCommand("quit");// and (250 = ReceiveResponse);
finally
closesocket(S);
end;
finally
WSACleanup;
end;
end;
begin
writeln("Started");
SendMail("<bwgblackraven@narod.ru>", "<bwgblackraven@narod.ru>", "Date: "+
DateTimeToStr(now)+#13#10+"From: one@prog.ru"+#13#10+
"To: <bwgblackraven@narod.ru>"+#13#10+"Subject: Mail"+
#13#10#13#10+"The test", "smtp.narod.ru");
writeln("Sended");
readln;
end.
Получил такой пинок:
220
550
503
503
503
550
По RFC 503 - Bad sequence of commands
И что не верно?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.03.18;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c