- PVSM.RU - https://www.pvsm.ru -
Нередко возникает необходимость в автоматической генерации и отправке электронных писем на основе данных из БД. Это могут быть различные отчёты с таблицами, диаграммами или уведомления о наступлении каких-то событий.
Всё это можно реализовать непосредственно в самой СУБД Caché, выступающей здесь и как почтовый сервер приложений.
Далее рассмотрим следующие примеры:
Для работы с почтой [1] существует несколько классов пакета %Net [2].
В документации достаточно подробно описана работа с email, поэтому сразу приступим к примерам.
#dim ex As %Exception.SystemException
try{
set msg=##class(%Net.MailMessage).%New()set msg.Subject="Тема письма"
set msg.From="from@domain.com"
do msg.To.Insert("to@domain.com")
do msg.TextData.Write("Привет, Хабр!")
set smtp=##class(%Net.SMTP).%New()
set smtp.smtpserver="123.145.167.189"$$$ThrowOnError(smtp.Send(msg))
}catch ex {
write $system.Status.GetErrorText(ex.AsStatus(),"ru"),!
}
Поскольку для тестов использовалась Unicode-версия Caché, то кодировка письма по умолчанию равна utf-8, что нам вполне подходит.
Если у вас 8-битная версия, то необходимо дополнительно установить нужную кодировку.
Например, так:
set msg.Charset="utf-8"
Добавим к примеру выше следующие строчки:
do msg.Headers.SetAt("Company-Confidential","Sensitivity")
do msg.Headers.SetAt("Low","X-Priority")
do msg.Headers.SetAt("Low","X-MSMail-Priority")
do msg.Headers.SetAt("Low","Importance")
Схожим образом можно добавлять и другие заголовки в ваши письма.
Для заголовка Sensitivity (пометка) доступны следующие значения:
Для X-Priority, X-MSMail-Priority и Importance (важность) доступны следующие значения или их числовые коды:
Если SMTP-сервер требует аутентификацию, то необходимо воспользоваться классом %Net.Authenticator:
do msg.To.Insert("to@domain.com")
do msg.Cc.Insert("cc@domain.com")
do msg.Bcc.Insert("bcc@domain.com")do msg.TextData.Write("Привет, Хабр!")
set auth=##class(%Net.Authenticator).%New()
set auth.UserName="логин"
set auth.Password="пароль"set smtp=##class(%Net.SMTP).%New()
set smtp.smtpserver="123.145.167.189"
set smtp.authenticator=auth
Для добавления вложений существует несколько методов: AttachFile, AttachStream, AttachEmail, AttachNewMessage.
Добавим в наш пример файл с фотографией:
do msg.AttachFile("c:Photo","test.jpg")
Для этого присвоим истину свойству IsHTML:
//…
do msg.To.Insert("to@domain.com")
set msg.IsHTML=1
do msg.TextData.Write("<b>Привет</b>, <font color='red'>Хабр</font>!")
do msg.TextData.Write("<br/>Нажмите на <a href='http://intersystems.ru/cache/index.html'>Caché</a>, чтобы перейти на сайт <u>InterSystems</u>.")
set smtp=##class(%Net.SMTP).%New()//...
//…
set msg.IsHTML=1
set msg.MultiPartType="related"do msg.AttachFile("c:Photo","test1.jpg")
do msg.AttachFile("c:Photo","test2.gif")set part=msg.Parts.GetAt(1)
set part.ContentType="image/jpeg"
do part.Headers.SetAt("id1","Content-ID")set part=msg.Parts.GetAt(2)
set part.ContentType="image/gif"
do part.Headers.SetAt("id2","Content-ID")do msg.TextData.Write("<b>Привет</b>, <font color='red'>Хабр</font>!")
do msg.TextData.Write("<br/><img src='cid:id1'>")
do msg.TextData.Write("<br/><img src='cid:id2'>")//...
//…
set msg.IsHTML=$$$YES
set msg.MultiPartType="related"
set stream=##class(%GlobalBinaryStream).%New()
do stream.Write($system.Encryption.Base64Decode(
"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD"_$$$NL_
"UUlEQVR42lWTWUwTURSGaUtIKY5QweISTUzceDGu0Rj1xURjTNQEE+ODGn0hPhBEQdqZztahBbrA"_$$$NL_
"tFih1Fprh9IBiVLLErZSU7BUoS7VqNH44ovx0S0ovdfO4Ez04cw9Ofec7/5zzr15NEnkUxSVFx8O"_$$$NL_
"bZ1x7nzHN6z9nOhnzOFwWCnECcKoEFbBRrrp6iF/XRvD0BoplkdTuAiIhtt3P3Fu+jJlKlkM1WoX"_$$$NL_
"LFjVeSnpXrC94gV3ciJp1X0L1K7+NtDfvXdpj1TmmUwm8QTfLa867T+ceWTSwO5r5b87XNaDEoBr"_$$$NL_
"v3p2Ai+AU1Qh5OiDGS4UXi4roAisQHBiYfJS2obAVPMyELYcGxViOIaKcLaNLXzadej5nBUBPXW6"_$$$NL_
"hdYW0z4RQOYUXK2tUfr8QeXL0Kn4JKEBk7QWdtrrLggJJEmoCBxVCf50qIaaa0HABFkEPZaLNnGf"_$$$NL_
"wPNFGV0u05Y554bvMQoBPLbxs9t9QydJpHP/KayRbsf+pG1NdgTTgDuGXa8dbS41ZtArxaQYT1Wl"_$$$NL_
"HVqYaloGOcvJIan4X2MdViTl3vExbS+GPfXlvzzutj1LPch9HrYea59t0YIRtAAO+PQuIWYwNKik"_$$$NL_
"Yty41Iuk/3TvMzsCB9HcQR7msgzgjZs7Z5rLQPR6PojeJW2d3oDCoG/IlwAYqlexbp/i9eB19ziu"_$$$NL_
"BoMoAlrR03YZ0G8+0JFhS8EjuhD6zWfuCTEjppcBOKYX1bwaqA5MM2oYZ4pBy7XjrAyY7sPqU01F"_$$$NL_
"cNZW/jtwZeXXVpt5u1RM4JhYzHFBddqz5/28fUU2NwngtVUbZUCE79o6x67/MYiXLiSbS8D9xp1v"_$$$NL_
"I7znkLvDK07A5/MiT7mzdxMMAsdMqxaiWDHkgzePigBUXy9KTfdWeVKNSjjPrvv5uKkYxszlIHX7"_$$$NL_
"eDLeVfkgbt30bt5eAlOOtT9nLRrI03szrOumOtcb4SrTSj2KKfr4nuUZ7kR8HFPAYXLlYqxRl43T"_$$$NL_
"GjjTWAhHCC1MNK/+lWA0cJLRgfsh95G/N1H136z7+BCSuHMuMEGVLo4a1XCKKcuO0WXZBw1FcNig"_$$$NL_
"hmPWbe8jIeeJpdFiCrkHguWUyM92NBKseBut8T92bfsw66z49IyrHH2T5CvlqeCYUvL/ANIZ7+oh"_$$$NL_
"XSdWAAAAAElFTkSuQmCC"))
do msg.AttachStream(stream,"id1")
set part=msg.Parts.GetAt(1)
set part.ContentType="image/png"
do part.Headers.SetAt("id1","Content-ID")do msg.TextData.Write("<html><body>")
do msg.TextData.Write("<b>Привет</b>, <font color='red'>Хабр</font>!")
do msg.TextData.Write("<ul><li>asd</li><li>qwe</li><li>zxc</li></ul>")
do msg.TextData.Write("<img src='cid:id1'>")
do msg.TextData.Write("<br><span style='color:red;font-weight:bold'>B</span>un<span style='color:green;font-weight:bold'>ă</span> ziua!")
do msg.TextData.Write("<br><table border=1 cellpadding=2 cellspacing=2><tr BGCOLOR=#22ffdd><td>Столбец №1</td><td>Столбец №2</td></tr><tr><td>Row (1,1)</td><td BGCOLOR=#ddff22>Row (1,2)</td></tr><tr><td>Row (2,1)</td><td>Row (2,2)</td></tr></table>")
do msg.TextData.Write("</body></html>")//...
Автор: servitRM
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/cache/27459
Ссылки в тексте:
[1] почтой: http://docs.intersystems.com/cache20122/csp/docbook/DocBook.UI.Page.cls?KEY=GNET_email
[2] %Net: http://docs.intersystems.com/cache20122/csp/documatic/%25CSP.Documatic.cls
[3] Скачать: http://db.tt/kxrRnoNr
[4] Источник: http://habrahabr.ru/post/169785/
Нажмите здесь для печати.