Содержимое Message

soderzhimoe message Сценарии на стороне клиента

Информационное наполнение почтового сообщения. Это может быть строка (bytes или str) в простых сообщениях или список дополнительных объектов Message, содержащий вложения или альтернативные части. Для некоторых необычных типов информационным наполнением может быть объект Python None.

Тип MIME объекта сообщения Message является ключом к пониманию его содержимого. Например, электронные письма с вложенными изображениями могут состоять из основного объекта Message верхнего уровня (типа multipart/mixed) с тремя дополнительными объектами Message в качестве информационного наполнения — один для основного текста (типа text/plain), другие два для изображений (типа image/jpeg). Изображения могут кодироваться при передаче в текст с применением алгоритма Base64 или другого; способ кодирования, а также оригинальное имя файла изображения указываются в заголовках частей.

Аналогично электронное письмо, включающее простой текст и альтернативную разметку HTML, будет представлено в виде корневого объекта Message типа multipart/alternative с двумя вложенными объектами Message — объект с простым текстом (типа text/plain) и объект с разметкой HTML (типа text/html). Программа почтового клиента сама определит, какую часть отображать, зачастую опираясь на предпочтения пользователя.

Простейшие сообщения могут состоять из единственного корневого объекта Message типа text/plain или text/html, представляющего все тело сообщения. Информационным наполнением в таких электронных письмах является обычная строка. Они могут вообще не иметь явно указанного типа; в таких случаях по умолчанию сообщения интерпретируются, как имеющие тип text/plain. Некоторые сообщения, состоящие из единственной части, имеют тип text/html без указания типа text/plain — для просмотра они требуют использования веб-броузера или другого инструмента отображения разметки HTML (или особого настроя глаз у пользователя).

Возможны и другие комбинации, включая типы, которые нечасто встретишь на практике, такие как message/delivery. Большинство сообщений имеют основную текстовую часть, хотя и не обязательно, и могут вкладываться в сообщения, состоящие из нескольких частей или имеющие другую структуру.

Во всех случаях почтовое сообщение представляет собой простую линейную последовательность, и структура сообщения определяется автоматически, когда производится анализ текста письма, или создается вызовами методов, когда формируется новое сообщение. Например, при создании сообщений метод attach объекта сообщения добавляет дополнительные части, а метод set_payload сохраняет строку в качестве информационного наполнения для простых сообщений.

Объекты Message также обладают разнообразными свойствами (например, имя файла вложения) и предоставляют удобный метод-генератор walk, который при каждом обращении в цикле for или в других итерационных контекстах возвращает следующий объект Message в цепочке вложенных объектов. Поскольку возвращаемый этим методом генератор обхода первым возвращает корневой объект Message (то есть self), сообщения, состоящие из единственной части, не приходится обрабатывать как особый случай — фактически сообщения, состоящие из единственной части, можно интерпретировать как объект Message с единственным элементом информационного наполнения — самим собой.

В конечном счете, структура объекта Message близко отражает текстовое представление сообщений электронной почты. Специальные строки заголовков в тексте письма определяют его тип (например, простой текст или состоящее из нескольких частей), а между вложенными частями содержимого помещается специальный разделитель. Все особенности текстового представления автоматически обрабатываются пакетом email, поэтому при анализе и составлении сообщений нам не требуется помнить о деталях форматирования.

Если вам интересно увидеть, как все это соотносится с настоящими электронными письмами, то лучше всего будет ознакомиться со структурой необработанного текста сообщения, отображаемого почтовым клиентом, а также с некоторыми примерами, с которыми мы встретимся в этой книге. Фактически, мы уже видели несколько писем — простыми примерами могут служить результаты, выведенные сценарием получения почты по протоколу POP выше. За более подробными сведениями об объекте Message и о пакете email в целом обращайтесь к разделу с описанием пакета email в руководстве по библиотеке Python. Ради экономии места мы опустим такие детали, как перечень доступных схем кодирования и классов объекта MIME.

Кроме пакета email в стандартной библиотеке Python имеются и другие инструменты для работы с электронной почтой. Например, модуль mimetypes отображает имена файлов в тип MIME и обратно:

mimetypes.guess_type(filename)

Отображает имя файла в тип MIME. Имя spam.txt отображается в тип «text/plan».

mimetypes.guess_extension(contype)

Отображает тип MIME в расширение имени файла. Тип «text/html» отображается в расширение .html.

Мы уже использовали модуль mimetypes ранее в этой главе, когда с его помощью по имени файла определяли режим его передачи по FTP (пример 13.10), а также в главе 6, где он применялся для выбора программы-проигрывателя по имени файла (смотрите примеры в той главе, включая сценарий playfile.py, пример 6.23). При обработке электронной почты эти функции могут пригодиться в реализации процедуры прикрепления файлов к новым сообщениям (guess_type) и сохранения вложений, для которых не указано имя файла (guess_extension). Фактически исходный программный код этого модуля может служить исчерпывающим справочником по типам MIME. Дополнительные подробности об этих инструментах смотрите в руководстве по библиотеке.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий