Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.18;
Скачать: CL | DM;

Вниз

E-Mail & Winsock.   Найти похожие ветки 

 
paul_shmakov ©   (2002-01-15 11:07) [2]

вот, только что набросал. пример показывает посылку самого простого письма. остальные поля в заголовке (типа Subject) и диалог с smtp сервером см. в rfc.
да и коды, которые сервер возвращает - это я так, на примере сейчас посмотрел - точно не помню. так что за дополнительной информацией RFC 0821.

program mail;

uses Windows, SysUtils, Winsock;

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)^)^;
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 not Result then
closesocket(S);
end;
end;

function SendCommand(Text: string): Boolean;
var
Buffer: PChar;
Size: Integer;
begin
Text := Text + #10;
Size := Length(Text);
GetMem(Buffer, Size + 1);
try
StrCopy(Buffer, PChar(Text));
Result := send(S, Buffer^, Size, 0) <> SOCKET_ERROR;
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
Exit;

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);
end;

begin
Result := false;
WSAStartup($0101, WSData);
try
if ConnectToSmtp then
try
ReceiveResponse;
Result :=
SendCommand("helo delphimail") and (250 = ReceiveResponse) and
SendCommand("mail from: " + From) and (250 = ReceiveResponse) and
SendCommand("rcpt to: " + Receiver) and (250 = ReceiveResponse) and
SendCommand("data") and (354 = ReceiveResponse) and
SendCommand(Text + #10"."#10) and (250 = ReceiveResponse) and
SendCommand("quit") and (250 = ReceiveResponse);
finally
closesocket(S);
end;
finally
WSACleanup;
end;
end;

begin
SendMail("<billy@microsoft.com>", "<paul_shmakov@mail.ru>", "Hello from Billy!", "smtp.mail.ru");
end.



Страницы: 1 вся ветка

Текущий архив: 2002.03.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
14-57520
dimich
2002-02-01 14:58
2002.03.18
Мастера помогите....горит лаба( средне геометрическое)!!!


1-57365
Анонимщик
2002-03-01 14:07
2002.03.18
Как сделать хинт, которыйбы перемещался вместе с мышиным курсором и был под ним?


1-57392
AlexMey
2002-03-01 15:33
2002.03.18
Можно ли отчёт QReport экспортировать в Word?


1-57374
Vvedensk
2002-03-04 05:46
2002.03.18
Как вставить в edit каких-то 3 переменных ....


1-57457
Man-In-Red
2002-03-03 03:04
2002.03.18
Как в своей программе использовать свои курсоры? Посмотрите, пожалуйста, что тут не так?