Пакет email в Python 3.1 содержит мощные инструменты для анализа и составления почтовых сообщений и может использоваться с применением небольшого количества обходных решений как основа полнофункциональных клиентов электронной почты, подобных тем, что приводятся в этой книге. Однако, как вы могли убедиться, на сегодняшний день он недостаточно функционален. Вследствие этого необходима дальнейшая специализация его текущего прикладного интерфейса, что, впрочем, является временным решением. Кроме создания собственных механизмов анализа и составления почтовых сообщений (которые практически невозможно описать в книге конечного размера!) здесь вполне уместно пойти на некоторые компромиссы. Более того, изначальная сложность поддержки Юникода в email устанавливает определенные рамки на дальнейшее развитие этой темы в книге.
В этом издании мы обеспечим поддержку кодировок Юникода для текстовых частей и заголовков при составлении сообщений и будем учитывать их в текстовых частях и заголовках принимаемых сообщений. Однако, чтобы обеспечить такие возможности с «хромающим» пакетом email в Python 3.1, мы будем применять в клиентах электронной почты, представленных в этой книге, следующие приемы работы с Юникодом:
• Для предварительного декодирования полного текста полученного почтового сообщения и для кодирования текстового содержимого отправляемого сообщения будут использоваться пользовательские настройки и умолчания.
• Для декодирования двоичного содержимого, возвращаемого методом get_payload, когда потребуется обращаться с текстовыми частями как со строками str, будет использоваться информация в заголовках, но в других контекстах мы будем использовать файлы двоичного режима, чтобы избежать ненужных проблем.
• Для кодирования и декодирования заголовков сообщений, таких как «From» и «Subject», если они не являются простым текстом, будут использоваться форматы, предусматриваемые стандартами электронной почты.
• Для решения проблемы создания сообщений с двоичными вложениями будет применяться описанное выше обходное решение.
• В зависимости от типов Юникода и с учетом поведения пакета email объекты текстовых сообщений будут конструироваться особым образом.
Эти решения нельзя назвать полными. Например, некоторые клиенты электронной почты в этом издании учитывают кодировки Юникода для текстовых вложений и заголовков, но они не предпринимают никаких дополнительных шагов по кодированию полного текста отправляемых сообщений, кроме тех, что диктуются модулем smtplib, и реализуют приемы, которые могут оказаться неудобными в некоторых ситуациях. Но, как мы увидим далее, несмотря на ограничения, наши клиенты по-прежнему будут способны решать сложные задачи и обрабатывать очень широкий круг почтовых сообщений.
Так как развитие Python продолжается непрерывно, следите за информацией на веб-сайте книги, где будет сообщаться об изменениях, которые могут вызвать необходимость корректировки программного кода, использующего пакет email. Новые версии пакета email, возможно, обеспечат более полную поддержку Юникода. Однако при этом, как это случилось с Python 3.X, в жертву может быть принесена обратная совместимость, что повлечет за собой необходимость изменения программного кода из этой книги. Более подробную информацию по этой проблеме ищите в Интернете и в примечаниях к новым версиям Python.
Этот краткий обзор позволяет получить некоторое представление об основных особенностях интерфейса, тем не менее, чтобы получить более полное представление о возможностях пакета email, необходимо перейти к исследованию более крупных примеров. Первый такой пример приводится в следующем разделе.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011