Хабарлама қалыптастыру

Салынған файлдармен берілген хабарламаларды қалыптастыру жиі туындайтын жағдай. Келесі мысалда мәтінмен және ендірумен берілген хабарламалар құралады. Класс ретінде хабарламалар туындату үшін 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' үнсіз келісім бойынша).

Наши рекомендации