|
Навигация
|
Главная » Delphi
Synapse в Delphi. Отправка писем с вложениями
Источник: webdelphi В прошлой статье про использование Synapse для отправки писем мы разработали простенькое приложение для отправки текстового сообщения на e-mail. Сегодня доработаем процедуру отправки письма, а именно, сделаем возможность отпраки на e-mail любых файлов (вложений).
Вкратце напомню содержание предыдущей статьи по Synapse и SMTP. Для работы с электронной почтой мы использовали следующие модули библиотеки: smtpsend, mimemess и mimepart.
Отправка писем происходила по следующей схеме:
- Создавался объект TMimeMess для которого в заголовках указывались тема письма, адрес отправителя и адреса получателей
- Далее для объекта TMimeMess создавался корневой элемент сообщения, имеющий тип TMimePart
- В TMimePart добавлялся либо текст, либо HTML-код
- Последовательно вызывались два метода: метод объекта 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
|