email
— Пакет обработки электронной почты и MIME
Пакет email
— это библиотека для управления сообщениями электронной
почты. Он специально разработан не для отправки любых сообщений электронной
почты через SMTP (RFC 2821), NNTP или других серверов; это функции таких
модулей, как smtplib
и nntplib
. Пакет email
пытается
максимально соответствовать RFC, поддерживая RFC 5233 и RFC 6532, а также
связанные с MIME RFC, например: RFC 2045, RFC 2046, RFC 2047,
RFC 2183 и RFC 2231.
Общую структуру пакета email можно разделить на три основных компонента, а также четвертый компонент, управляющий поведением других компонентов.
Центральным компонентом пакета является «объектная модель», представляющая
сообщения электронной почты. Приложение взаимодействует с пакетом главным
образом через интерфейс объектной модели, определённый в подмодуле
message
. Приложение может использовать данный API, чтобы задавать
вопросы о существующем электронном письме, создавать новое электронное письмо
или добавлять или удалять подкомпоненты электронной почты, которые сами
используют тот же интерфейс объектной модели. Т. е., в соответствии с природой
сообщений электронной почты и их подкомпонентов MIME, объектная модель
электронной почты представляет собой древовидную структуру объектов, которые
все предоставляют API EmailMessage
.
Двумя другими основными компонентами пакета являются parser
и
generator
. Парсер принимает сериализованную версию сообщения
электронной почты (поток байтов) и преобразует её в дерево объектов
EmailMessage
. Генератор принимает
EmailMessage
и превращает его обратно в сериализованный
поток байтов. (Парсер и генератор также обрабатывают потоки
текстовых символов, но такое использование не рекомендуется, т. к. слишком
легко получить сообщения, которые так или иначе недействительны.)
Компонент управления — модуль policy
. С каждым
EmailMessage
, каждым generator
и каждым
parser
связан объект policy
, управляющий его
поведением. Обычно приложению требуется указать политику только при создании
EmailMessage
, либо путём прямого создания экземпляра
EmailMessage
для создания нового сообщения электронной
почты, либо путём парсинга входного потока с использованием
parser
. Но политику можно изменить, когда сообщение сериализуется
с помощью generator
. Это позволяет, например, анализировать
обычное сообщение электронной почты с диска, но сериализовать его с
использованием стандартных параметров SMTP при отправке на сервер электронной
почты.
Пакет email делает все возможное, чтобы скрыть от приложения детали различных регулирующих RFC. Концептуально приложение должно иметь возможность обрабатывать сообщение электронной почты как структурированное дерево Юникод текста и двоичных вложений, не беспокоясь о том, как они представлены при сериализации. На практике, однако, часто необходимо знать, по крайней мере, некоторые из правил, управляющих сообщениями MIME и их структурой, в частности имена и характер «типов содержимого» MIME и то, как они идентифицируют составные документы. По большей части это знание должно требоваться только для более сложных приложений, и даже тогда это должна быть только рассматриваемая структура высокого уровня, а не детали того, как данные структуры представлены. Поскольку типы контента MIME широко используются в современном интернет-программном обеспечении (не только в электронной почте), концепция будет знакома многим программистам.
В следующих разделах рассматриваются функциональные возможности пакета
email
. Мы начнём с объектной модели message
, который
является основным используемым приложением интерфейсом, а затем
перейдём к компонентам parser
и generator
. Затем мы
рассмотрим элементы управления policy
, что завершает рассмотрение
основных компонентов библиотеки.
Следующие три раздела охватывают вызываемые пакетом исключения, и
дефекты (несоблюдение RFC), которые может обнаружить parser
.
Затем мы рассмотрим подкомпоненты headerregistry
и
contentmanager
, предоставляющие инструменты для более
детальной обработки заголовков и полезных данных соответственно. Оба данных
компонента содержат функции, относящиеся к потреблению и созданию нетривиальных
сообщений, а также документируют свои API-интерфейсы расширяемости, которые
могут представлять интерес для продвинутых приложений.
Далее следует множество примеров использования основных частей API, описанных в предыдущих разделах.
Вышеизложенное представляет собой современный (дружественный к Юникод) API
пакета email. Остальные разделы, начиная с класса
Message
, охватывают устаревший API
compat32
, который гораздо более непосредственно связан с
деталями представления сообщений электронной почты.
compat32
API не скрывает детали RFC от приложения, но
для приложений, которые должны работать на этом уровне, они могут быть
полезными инструментами. Данная документация также актуальна для приложений,
которые все ещё используют API compat32
по соображениям
обратной совместимости.
Изменено в версии 3.6: Документы реорганизованы и переписаны для продвижения нового API
EmailMessage
/EmailPolicy
.
Содержимое документации пакета email
:
email.message
: представление сообщений электронной почтыemail.parser
: Парсинг сообщений электронной почтыemail.generator
: Создание MIME документовemail.policy
: Объекты политикиemail.errors
: классы исключений и дефектовemail.headerregistry
: пользовательские объекты заголовковemail.contentmanager
: управление MIME содержимымemail
: примеры
Устаревший API:
email.message.Message
: представление сообщения электронной почты с использованием APIcompat32
email.mime
: Создание объектов электронной почты и MIME с нуляemail.header
: интернационализированные заголовкиemail.charset
: представление множества символовemail.encoders
: кодировщикиemail.utils
: Прочие утилитыemail.iterators
: итераторы
См.также
- Модуль
smtplib
- SMTP-клиент (простой протокол передачи почты)
- Модуль
poplib
- Клиент POP (протокол почтового отделения)
- Модуль
imaplib
- Клиент IMAP (протокол доступа к сообщениям в Интернете)
- Модуль
nntplib
- Клиент NNTP (Транспортный протокол сетевых новостей)
- Модуль
mailbox
- Инструменты для создания, чтения и управления коллекциями сообщений на диске с использованием различных стандартных форматов.
- Модуль
smtpd
- Фреймворк SMTP-сервера (в первую очередь полезен для тестирования)