msg["From"] = mkh([("Друг", "koi8–r"), ("
msg["To"] = mkh([("Друг2", "koi8–r"), ("
# То, чего будет не видно, если почтовая программа поддерживает 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. Функция make_header() из email.Header позволяет закодировать содержимое для заголовка:
>>> from email.Header import make_header
>>> print make_header([("Друг", "koi8–r"), ("
=?koi8–r?b?5NLVxw==?=
>>> print make_header([(u"Друг", ""), ("
=?utf–8?b?w6TDksOVw4c=?=
Функция email.Encoders.encode_base64() воздействует на переданное ей сообщение и кодирует тело с помощью base64. Другие варианты: encode_quopri() — кодировать quoted printable, encode_7or8bit() — оставить семь или восемь бит. Эти функции добавляют необходимые поля.
Аргументы конструкторов классов из MIME–модулей пакета email:
class MIMEBase(_maintype, _subtype, **_params)
Базовый класс для всех использующих MIME сообщений (подклассов Message). Тип содержимого задается через _maintype и _subtype.
class MIMENonMultipart()
Подкласс для MIMEBase, в котором запрещен метод attach(), отчего он гарантированно состоит из одной части.
class MIMEMultipart([_subtype[, boundary[, _subparts[, _params]]]])
Подкласс для MIMEBase, который является базовым для MIME–сообщений из нескольких частей. Главный тип 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 используется для создания MIME–объектов с главным типом message. Параметр _msg применяется в качестве тела и должен являться экземпляром класса Message или его потомков. Подтип задается с помощью _subtype, по умолчанию 'rfc822'.
class MIMEText(_text[, _subtype[, _charset]])
Подкласс MIMENonMultipart. Используется для создания MIME–сообщений текстового типа. Главный тип — text, подтип указывается с помощью _subtype. Данные задаются параметром _text. Посредством _charset можно указать кодировку (по умолчанию 'us–ascii').
Разбор поля заголовка
В примере выше поле Subject формировалось с помощью email.Header.make_header(). Разбор поля поможет провести другая функция: email.Header.decode_header(). Эта функция возвращает список кортежей, в каждом из них указан кусочек текста поля и кодировка, в которой этот текст был задан. Следующий пример поможет понять суть дела: