Воскресенье, 05.05.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нравится раздел статьи?
Всего ответов: 68
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Сеть-интернет » Почта

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

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

Получить ссылку на материал

Категория: Почта | Добавил: Барон (14.12.2011)
Просмотров: 928 | Теги: почта, SendMail, PostMessage, Indy, TNMSMTP, TNMPOP3 | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
Web-приложения [6]
Почта [12]
Работа с HTTP [4]
Робота с XML [4]
Сервер [3]
Разные [50]
Королевство Delphi © 2010-2024
Яндекс цитирования