В 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;
|