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