Календарь на Апрель 2024 года: calendar2008.ru/2024/aprel/
Навигация
Главная »  Delphi 

Synapse в Delphi. Отправка писем с вложениями


Источник: webdelphi
В прошлой статье про использование Synapse для отправки писем мы разработали простенькое приложение для отправки текстового сообщения на e-mail.  Сегодня доработаем процедуру отправки письма, а именно, сделаем возможность отпраки на e-mail любых файлов (вложений).

Вкратце напомню содержание предыдущей статьи по Synapse и SMTP. Для работы с электронной почтой мы использовали следующие модули библиотеки: smtpsend, mimemess и mimepart.

Отправка писем происходила по следующей схеме:

  1. Создавался объект TMimeMess для которого в заголовках указывались тема письма, адрес отправителя и адреса получателей
  2. Далее для объекта TMimeMess создавался корневой элемент сообщения, имеющий тип TMimePart
  3. В TMimePart добавлялся либо текст, либо HTML-код
  4. Последовательно вызывались два метода: метод объекта TMimeMess для кодирования письма - EncodeMessage и метод SendToRaw для отправки сообщения.
Сегодня немного расширим функциональность нашего приложения и отправим на почту вместе с текстом любой файл.

Для добавления в тело сообщения файлов в Synapse предусмотрены следующие методы объекта TMimeMess:

1 
function AddPartBinary(const Stream: TStream; const FileName: string; const PartParent: TMimePart): TMimepart;
 
добавляет в содержимое сообщения бинарные данные из потока. При этом MIME-тип для вложения определяется автоматически по  расширению файла (FileName), а все данные беруться из потока Stream.

1 
function AddPartBinaryFromFile(const FileName: string; const PartParent: TMimePart): TMimepart;
 
Также добавляет вложение как и AddPartBinary, но, в отличие от предыдущего метода не требует указания потока с данными. MIME-тип определяется автоматически.

Воспользуемся вторым методом, т.е. AddPartBinaryFromFile и отправим на почту, например, изображение.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 
Procedure SendMail (pHost, pSubject, pTo, pFrom , pTextBody, pHTMLBody : string); var tmpMsg : TMimeMess; tmpStringList : TStringList; tmpMIMEPart : TMimePart; begin tmpMsg := TMimeMess.Create; tmpStringList := TStringList.Create; try // Headers tmpMsg.Header.Subject := pSubject; tmpMsg.Header.From := pFrom; tmpMsg.Header.ToList.Add(pTo);   // MIMe Parts tmpMIMEPart := tmpMsg.AddPartMultipart('alternate',nil);   if length(pTextBody)>0 then begin tmpStringList.Text := pTextBody; tmpMsg.AddPartText(tmpStringList, tmpMIMEPart); end else begin tmpStringList.Text := pHTMLBody; tmpMsg.AddPartHTML(tmpStringList, tmpMIMEPart); end;   if Form1.Edit1.Text<>'' then tmpMsg.AddPartBinaryFromFile(Form1.Edit1.Text,tmpMIMEPart) // кодируем и отправляем tmpMsg.EncodeMessage; smtpsend.SendToRaw(pFrom, pTo, pHost, tmpMsg.Lines, 'login', 'password');   finally tmpMsg.Free; tmpStringList.Free; end; end;
Мы добавили в процедуру всего две строки кода:

1 2 
if Form1.Edit1.Text<>'' then tmpMsg.AddPartBinaryFromFile(Form1.Edit1.Text,tmpMIMEPart)
Для того, чтобы отправить на почту файл. При этом указали корневой элемент tmpMIMEPart: TMimePart.
Аналогичным образом в письмо можно добавить любое количество, любых файлов. Остается только добавить, что в Synapse автоматически распознаются следующие MIME-типы и подтипы (по расширению файла):

Расширение  Тип  Подтип 
AU audio basic
MP2 mpeg
MP3 mpeg
RA x-realaudio
SND basic
WAV x-wav
MID midi
AVI video x-msvideo
MOV quicktime
MPEG MPEG
MPG MPEG
QT quicktime
DOC application MSWord
EPS Postscript
PS Postscript
RTF RTF
PDF PDF
WPD Wordperfect5.1
ZIP ZIP
BMP image BMP
GIF GIF
JPEG JPEG
JPG JPEG
PNG PNG
TIF TIFF
TIFF TIFF
Для всех остальных файлов выставляется тип application с подтипом octet-stream. Если есть желание добавить в библиотеку распознавание других типов файлов, то дополните массив констант MimeType в модуле mimepart.



 

 Мировой рынок систем электронного документооборота.
 SQL-запросы в Delphi (исходники, документация).
 Проектирование информационных систем. Часть 4. Этапы разработки проекта: заключительные стадии проектирования, спецификации функций.
 Компания Borland анонсировала новейшие версии приложений StarTeam и CaliberRM.
 Интерполяция изображений в Delphi (исходники).


Главная »  Delphi 

© 2024 Team.Furia.Ru.
Частичное копирование материалов разрешено.