Хабарлама қалыптастыру
Салынған файлдармен берілген хабарламаларды қалыптастыру жиі туындайтын жағдай. Келесі мысалда мәтінмен және ендірумен берілген хабарламалар құралады. Класс ретінде хабарламалар туындату үшін email.Message модульіндегі Message-ді ғана қолданбай-ақ, сонымен қатар email.MIMEMultipart-дегі MIMEMultipart (бірнеше бөліктердегі хабарламалар үшін), MIMEImage (графикалық суреттердегі хабарламалар үшін), MIMEAudio (аудиофайлдар үшін), MIMEText (мәтіндік бөліктер үшін) қолдану:
# Модульдегі керекті модульдер және функциялар жүктелуде
from email.Header import make_header as mkh
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email.Encoders import encode_base64
# Басты хабарлама құрылуда және кейбір өрістер берілуде
msg = MIMEMultipart()
msg["Subject"] = mkh([("Привет", "koi8-r")])
msg["From"] = mkh([("Друг", "koi8-r"), ("<[email protected]>", "us-ascii")])
msg["To"] = mkh([("Друг2", "koi8-r"), ("<[email protected]>", "us-ascii")])
# Егер почталық бағдарлама MIME қолдайтын болса, онда көрінбейтіні
msg.preamble = "Multipart message"
msg.epilogue = ""
# Хабарламаның мәтіндік бөлігі
text = u""" Хатқа мұрағат файлы қоса тіркелген.""".encode("koi8-r")
to_attach = MIMEText(text, _charset="koi8-r")
msg.attach(to_attach)
# Файлдар бекітіледі
fp = open("archive_file.zip", "rb")
to_attach = MIMEBase("application", "octet-stream")
to_attach.set_payload(fp.read())
encode_base64(to_attach)
to_attach.add_header("Content-Disposition", "attachment",
filename="archive_file.zip")
fp.close()
msg.attach(to_attach)
print msg.as_string()
Бұл мысалда бірнеше email пакетінің модулі бірден көруге болады. email.Header-дегі make_header() функциясы тақырыпша үшін берілген мазмұнын кодтауға мүмкіндік береді.
>>> from email.Header import make_header
>>> print make_header([("Друг", "koi8-r"), ("<[email protected]>", "us-ascii")])
=?koi8-r?b?5NLVxw==?= <[email protected]>
>>> print make_header([(u"Друг", ""), ("<[email protected]>", "us-ascii")])
=?utf-8?b?w6TDksOVw4c=?= <[email protected]>
email.Encoders.encode_base64() функциясы оған жіберілген хабарламаға ықпал етеді және base64 көмегімен денені кодтайды. Басқа нұсқалар: encode_quopri() – quoted printable кодтау, encode_7or8bit() – жеті немесе сегіз битті қалдыру. Бұл функциялар керекті өрістерді қосады.
email пакеті MIME-модуліндегі класстар конструктірінің аргументтері:
class MIMEBase(_maintype, _subtype, **_params)
Барлық қолданыстағы MIME хабарламалардың класс қорлары (Message ішкі классы). Мазмұн түрі _maintype және _subtype арқылы беріледі.
class MIMENonMultipart()
attach() әдісі тыйым салынған (сондықтан ол кепілді) MIMEBase үшін ішкі класс бір бөліктен тұрады.
class MIMEMultipart([_subtype[, boundary[, _subparts[, _params]]]])
Бірнеше бөліктегі MIME – хабарламасы үшін базалық болып табылатын MIMEBase үшін ішкі класс. Басты түр multipart, ішкі түр _subtype арқылы көрсетіледі.
class MIMEAudio(_audiodata[, _subtype[, _encoder[, **_params]]])
MIMENonMultipart ішкі классы. Аудио мәліметтерден тұратын MIME – хабарламасын құру үшін қолданылады. Басты түр – audio, ішкі түр _subtype арқылы көрсетіледі. Мәліметтер _audiodata параметірімен беріледі.
class MIMEImage(_imagedata[, _subtype[, _encoder[, **_params]]])
MIMENonMultipart ішкі классы. Графикалық суреттегі MIME – хабарлама құру үшін қолданылады. Басты түр – image, ішкі түр _subtype арқылы көрсетіледі. Мәліметтер _imagedata парамерті арқылы беріледі.
class MIMEMessage(_msg[, _subtype])
MIMENonMultipart классы үшін MIMENonMultipart ішкі классы басты түр message болатын MIME – обьектісін құру үшін қолданылады. _msg параметрі денесі ретінде қолданылады және Message классының данасы немесе оның ұрпағы болу керек. Ішкі түр _subtype арқылы беріледі, 'rfc822' үнсіз келісімі бойынша.
class MIMEText(_text[, _subtype[, _charset]])
MIMENonMultipart ішкі классы. Мәтіндік түрдегі MIME – хабарламасын құру үшін қолданылады. Басты түр – text, ішкі түр _subtype арқылы көрсетіледі. Мәліметтер _text параметрі арқылы беріледі. _charset арқылы кодтауды көрсетуге болады ('usascii' үнсіз келісім бойынша).