Synapse в Delphi. Відправка листів із вкладеннями, Різне, Програмування, статті

У минулій статті про використання 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.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*