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

В 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;  
Теги:
Отправить письмо
Добавлено: 31 Июля 2018 06:47:10 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...