Чтение онлайн

на главную - закладки

Жанры

Язык программирования Python
Шрифт:

Кстати, в случае, когда сообщение является контейнером для других частей, get_payload выдает список объектов–сообщений (то есть экземпляров класса Message).

Формирование сообщения

Часто возникает ситуация, когда нужно сформировать сообщение с вложенным файлом. В следующем примере строится сообщение с текстом и вложением. В качестве класса для порождения сообщения можно использовать не только Message из модуля email.Message, но и MIMEMultipart из email.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»), ("<friend@mail.ru>", «us–ascii»)])

msg[«To»] = mkh([(«Друг2», «koi8–r»), ("<friend2@yandex.ru>", «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. Функция make_header из email.Header позволяет закодировать содержимое для заголовка:

Листинг

>>> from email.Header import make_header

>>> print make_header([(«Друг», «koi8–r»), ("<friend@mail.ru>", «us–ascii»)])

=?koi8–r?b?5NLVxw==?= <friend@mail.ru>

>>> print make_header([(u»Друг», ""), ("<friend@mail.ru>", «us–ascii»)])

=?utf–8?b?w6TDksOVw4c=?= <friend@mail.ru>

Функция 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. Эта функция возвращает список кортежей, в каждом из них указан кусочек текста поля и кодировка, в которой этот текст был задан. Следующий пример поможет понять суть дела:

Листинг

subj = """=?koi8–r?Q?=FC=D4=CF_=D0=D2=C9=CD=C5=D2_=CF=DE=C5=CE=D8_=C4=CC=C9?=

=?koi8–r?Q?=CE=CE=CF=C7=CF_=28164_bytes=29_=D0=CF=CC=D1_=D3_=D4?=

=?koi8–r?Q?=C5=CD=CF=CA_=D3=CF=CF=C2=DD=C5=CE=C9=D1=2E_=EF=CE=CF_?=

=?koi8–r?Q?=D2=C1=DA=C2=C9=CC=CF=D3=D8_=CE=C1_=CB=D5=D3=CB=C9_=D7?=

=?koi8–r?Q?_=D3=CF=CF=C2=DD=C5=CE=C9=C9=2C_=CE=CF_=CC=C5=C7=CB=CF?=

=?koi8–r?Q?_=D3=CF=C2=C9=D2=C1=C5=D4=D3=D1_=D7_=D4=C5=CB=D3=D4_?=

=?koi8–r?Q?=D3_=D0=CF=CD=CF=DD=D8=C0_email=2EHeader=2Edecode=5Fheader?=

Поделиться:
Популярные книги

Советник 2

Шмаков Алексей Семенович
7. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Советник 2

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Неудержимый. Книга XXXII

Боярский Андрей
32. Неудержимый
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Неудержимый. Книга XXXII

Седина в бороду, Босс… вразнос!

Трофимова Любовь
Юмор:
юмористическая проза
5.00
рейтинг книги
Седина в бороду, Босс… вразнос!

Закрытые Миры

Муравьёв Константин Николаевич
Вселенная EVE Online
Фантастика:
фэнтези
5.86
рейтинг книги
Закрытые Миры

Первый среди равных. Книга III

Бор Жорж
3. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
6.00
рейтинг книги
Первый среди равных. Книга III

Темная сторона. Том 2

Лисина Александра
10. Гибрид
Фантастика:
технофэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Темная сторона. Том 2

На границе империй. Том 7

INDIGO
7. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
6.75
рейтинг книги
На границе империй. Том 7

Гримуар темного лорда V

Грехов Тимофей
5. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда V

Кодекс Крови. Книга VIII

Борзых М.
8. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VIII

Я уже граф. Книга VII

Дрейк Сириус
7. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я уже граф. Книга VII

Лихие. Авторитет

Вязовский Алексей
3. Бригадир
Фантастика:
альтернативная история
попаданцы
5.00
рейтинг книги
Лихие. Авторитет

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия