Delphi World - Отправлять электронную почту
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Отправлять электронную почту

Приходит хакер к психиатру:
- Док, помоги, у меня раздвоение виртуальной личности.
- Не понял, это как?
- Я со своего второго ника на третий E-Mailы начал получать.

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


Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования