(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

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.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 11.03.2010 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Enterprise Connectors (1 Year term)
Delphi Professional Named User
go1984 pro
Купить WinRAR : 5 : Академическая лицензия 1 лицензия
The BAT! Home Upgrade- 1 компьютер
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Программирование в AutoCAD
СУБД Oracle "с нуля"
ЕRP-Форум. Творческие дискуссии о системах автоматизации
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100