Отправлять электронную почту

altВ D5 Вы можете попробовать использовать компоненты TNMSMTP и TNMPOP3,

в D6 и Kylix компоненты от NetMasters заменены компонентами Indy.

Алгоритм простой (для сторонних компонентов он принципиально ничем не отличается):

необходимо заполнить структуру PostMessage;
отправить эту структуру при помощи метода SendMail.
Структура PostMessage:

(*) FromName: string — имя отправителя;
FromAddress: string — Почтовый адресс отправителя
ReplyToAddress: string — Адрес, по которому следует ответить на письмо;
Organization: string
LocalProgram: string — Имя почтовой программы отправителя;
(*) ToAddress: TStringList — Почтовый адрес главного получателя (ей)
ToCC: TStringList — Список получателей Carbon Copy
ToBCC: TSringList — Список получателей Blind Carbon Copy
Attachments: TStringList — Список вложений
Body: TStringList — Собственно текст письма
Subject: string — Строка темы письма.
(*) — помечены обязательные поля. С остальным не сложно разобраться самому.

Также это можно сделать при помощи MAPI.

Т.е. письмо будет отправлено средствами _почтовой_программы_по_умолчанию_ — со всеми недостатками :) (например письмо будет помещено в папку «отправленные»). Зато без всяких там компонент и просто :)

Hиже готовая функция, в которой:

From — от кого
Dest — кому
Subject — тема
Text — текст письма
FileName — путь к вложению (если », то соответственно ничего и не вкладываем)
Outlook — показывать или нет письмо перед отправкой (в твоём случае False)


Uses MAPI;


function SendMail(const From, Dest, Subject, Text, FileName: PChar;
Outlook: boolean):Integer;
var
Message: TMapiMessage;
Recipient, Sender: TMapiRecipDesc;
File_Attachment: TMapiFileDesc;

function MakeMessage: TMapiMessage;
begin
FillChar(Sender, SizeOf(Sender), 0);
Sender.ulRecipClass := MAPI_ORIG;
Sender.lpszAddress := From;

FillChar(Recipient, SizeOf(Recipient), 0);
Recipient.ulRecipClass := MAPI_TO;
Recipient.lpszAddress := Dest;

FillChar(File_Attachment, SizeOf(File_Attachment), 0);
File_Attachment.nPosition := Cardinal(-1);
File_Attachment.lpszPathName := FileName;

FillChar(Result, SizeOf(Result), 0);
with Message do begin
lpszSubject := Subject;
lpszNoteText := Text;
lpOriginator := @Sender;
nRecipCount := 1;
lpRecips := @Recipient;
nFileCount := 1;
lpFiles := @File_Attachment;
end;
end;

var
SM: TFNMapiSendMail;
MAPIModule: HModule;
MAPI_FLAG: Cardinal;
begin
if Outlook then
MAPI_FLAG:=MAPI_DIALOG
else
MAPI_FLAG:=0;
MAPIModule := LoadLibrary(PChar(MAPIDLL));
if MAPIModule = 0 then
Result := -1
else
try
@SM := GetProcAddress(MAPIModule, ‘MAPISendMail’);
if @SM nil then begin
MakeMessage;
Result := SM(0, Application.Handle, Message, MAPI_FLAG, 0);
end else Result := 1;
finally
FreeLibrary(MAPIModule);
end;
end;

Понравилась статья? Поделиться с друзьями: