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

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

Жанры

Язык программирования 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?=

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

Врата Мертвого Дома

Эриксон Стивен
Малазанская империя
Фантастика:
эпическая фантастика
6.14
рейтинг книги
Врата Мертвого Дома

Закрытые воды

Денисов Вадим Владимирович
1. Путь на Кристу
Фантастика:
боевая фантастика
8.23
рейтинг книги
Закрытые воды

Возвращение

Лик Анастасия Владимировна
2. Эли
Фантастика:
фэнтези
попаданцы
9.15
рейтинг книги
Возвращение

Месть изгоя. Книга 3. Вариант О.Рыбаченко

Большаков Алексей Владимирович
5.00
рейтинг книги
Месть изгоя. Книга 3. Вариант О.Рыбаченко

Девяностые приближаются

Иванов Дмитрий
3. Девяностые
Фантастика:
попаданцы
альтернативная история
7.33
рейтинг книги
Девяностые приближаются

В лапах зверя

Зайцева Мария
1. Звериные повадки Симоновых
Любовные романы:
остросюжетные любовные романы
эро литература
5.00
рейтинг книги
В лапах зверя

Война

Валериев Игорь
7. Ермак
Фантастика:
боевая фантастика
альтернативная история
5.25
рейтинг книги
Война

Я снова не бог. Книга XXXVIII

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

Кровавые обещания

Мид Райчел
4. Академия вампиров
Фантастика:
ужасы и мистика
9.47
рейтинг книги
Кровавые обещания

Прайм. Рунный призрак

Бор Жорж
3. Легенда
Фантастика:
фэнтези
боевая фантастика
рпг
5.00
рейтинг книги
Прайм. Рунный призрак

Сказки и истории

Фрай Макс
Фантастика:
фэнтези
6.25
рейтинг книги
Сказки и истории

Проводник

Кораблев Родион
2. Другая сторона
Фантастика:
боевая фантастика
рпг
7.41
рейтинг книги
Проводник

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

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

111 симфоний

Михеева Людмила Викентьевна
Справочная литература:
справочники
6.00
рейтинг книги
111 симфоний