email.mime: Создание электронной почты и MIME-объектов с нуля

Источник: Lib/email/mime/


Этот модуль является частью устаревшего (Compat32) почтового API. Его функциональность частично заменена на contentmanager в новом API, но в некоторых приложениях эти классы могут быть полезны даже в нестаром коде.

Обычно вы получаете структуру объектов сообщений, передавая файл или некоторый текст парсеру, который разбирает текст и возвращает корневой объект сообщения. Однако вы также можете построить полную структуру сообщений с нуля или даже отдельные объекты Message вручную. Более того, вы можете взять существующую структуру и добавить в нее новые объекты Message, переместить их и т. д. Таким образом, получается очень удобный интерфейс для нарезки MIME-сообщений.

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

Вот классы:

class email.mime.base.MIMEBase(_maintype, _subtype, *, policy=compat32, **_params)

Модуль: email.mime.base

Это базовый класс для всех подклассов Message, специфичных для MIME. Как правило, вы не будете создавать экземпляры конкретно MIMEBase, хотя могли бы. MIMEBase предоставляется в первую очередь как удобный базовый класс для более специфических подклассов с поддержкой MIME.

_maintype - это основной тип Content-Type (например, text или image), а _subtype - это второстепенный тип Content-Type (например, plain или gif). _params - это словарь ключей/значений параметров, который передается непосредственно в Message.add_header.

Если указана policy (по умолчанию используется политика compat32), то она будет передана в Message.

Класс MIMEBase всегда добавляет заголовок Content-Type (основанный на _maintype, _subtype и _params) и заголовок MIME-Version (всегда установленный в 1.0).

Изменено в версии 3.6: Добавлен параметр policy только для ключевых слов.

class email.mime.nonmultipart.MIMENonMultipart

Модуль: email.mime.nonmultipart

Подкласс MIMEBase, это промежуточный базовый класс для сообщений MIME, которые не являются multipart. Основная цель этого класса - предотвратить использование метода attach(), который имеет смысл только для сообщений multipart. Если вызывается attach(), возникает исключение MultipartConversionError.

class email.mime.multipart.MIMEMultipart(_subtype='mixed', boundary=None, _subparts=None, *, policy=compat32, **_params)

Модуль: email.mime.multipart

Подкласс MIMEBase, это промежуточный базовый класс для сообщений MIME, которые относятся к multipart. Необязательное значение _subtype по умолчанию равно mixed, но может быть использовано для указания подтипа сообщения. К объекту сообщения будет добавлен Content-Type заголовок multipart/_subtype. Также будет добавлен заголовок MIME-Version.

Необязательная boundary - это строка границы многочастичного сообщения. При значении None (по умолчанию) граница вычисляется при необходимости (например, при сериализации сообщения).

_subparts - это последовательность начальных вложенных частей полезной нагрузки. Эту последовательность можно преобразовать в список. Вы всегда можете присоединить к сообщению новые вложенные части, используя метод Message.attach.

Необязательный аргумент policy по умолчанию принимает значение compat32.

Дополнительные параметры для заголовка Content-Type берутся из аргументов ключевых слов или передаются в аргумент _params, который представляет собой словарь ключевых слов.

Изменено в версии 3.6: Добавлен параметр policy только для ключевых слов.

class email.mime.application.MIMEApplication(_data, _subtype='octet-stream', _encoder=email.encoders.encode_base64, *, policy=compat32, **_params)

Модуль: email.mime.application

Являясь подклассом MIMENonMultipart, класс MIMEApplication используется для представления объектов сообщений MIME основного типа application. _data содержит байты для необработанных данных приложения. Необязательный параметр _subtype определяет подтип MIME и по умолчанию принимает значение octet-stream.

Необязательный _encoder - это вызываемый модуль (т.е. функция), который будет выполнять фактическое кодирование данных для транспортировки. Эта вызываемая функция принимает один аргумент, который является экземпляром MIMEApplication. Он должен использовать get_payload() и set_payload() для изменения полезной нагрузки в кодированную форму. Она также должна добавить любые Content-Transfer-Encoding или другие заголовки к объекту сообщения, если это необходимо. По умолчанию используется кодировка base64. Список встроенных кодировок см. в модуле email.encoders.

Необязательный аргумент policy по умолчанию принимает значение compat32.

_params передаются прямо в конструктор базового класса.

Изменено в версии 3.6: Добавлен параметр policy только для ключевых слов.

class email.mime.audio.MIMEAudio(_audiodata, _subtype=None, _encoder=email.encoders.encode_base64, *, policy=compat32, **_params)

Модуль: email.mime.audio

Подкласс MIMENonMultipart, класс MIMEAudio используется для создания объектов MIME-сообщений основного типа audio. _audiodata содержит байты для необработанных аудиоданных. Если эти данные могут быть декодированы как au, wav, aiff или aifc, то подтип будет автоматически включен в заголовок Content-Type. В противном случае вы можете явно указать подтип звука с помощью аргумента _subtype. Если минорный тип угадать не удалось и _subtype не был указан, то будет выдано сообщение TypeError.

Необязательный _encoder - это вызываемая переменная (т.е. функция), которая будет выполнять фактическое кодирование аудиоданных для транспортировки. Эта вызываемая функция принимает один аргумент, который является экземпляром MIMEAudio. Он должен использовать get_payload() и set_payload() для изменения полезной нагрузки в кодированную форму. Она также должна добавить любые Content-Transfer-Encoding или другие заголовки к объекту сообщения, если это необходимо. По умолчанию используется кодировка base64. Список встроенных кодировок см. в модуле email.encoders.

Необязательный аргумент policy по умолчанию принимает значение compat32.

_params передаются прямо в конструктор базового класса.

Изменено в версии 3.6: Добавлен параметр policy только для ключевых слов.

class email.mime.image.MIMEImage(_imagedata, _subtype=None, _encoder=email.encoders.encode_base64, *, policy=compat32, **_params)

Модуль: email.mime.image

Подкласс MIMENonMultipart, класс MIMEImage используется для создания объектов MIME-сообщений основного типа image. _imagedata содержит байты для необработанных данных изображения. Если этот тип данных может быть обнаружен (jpeg, png, gif, tiff, rgb, pbm, pgm, ppm, rast, xbm, bmp, webp и exr), то подтип будет автоматически включен в заголовок Content-Type. В противном случае вы можете явно указать подтип изображения с помощью аргумента _subtype. Если минорный тип угадать не удалось и _subtype не был указан, то выдается сообщение TypeError.

Необязательный _encoder - это вызываемая переменная (т.е. функция), которая будет выполнять фактическое кодирование данных изображения для транспортировки. Эта вызываемая функция принимает один аргумент, который является экземпляром MIMEImage. Он должен использовать get_payload() и set_payload() для изменения полезной нагрузки в кодированную форму. Она также должна добавить любые Content-Transfer-Encoding или другие заголовки к объекту сообщения, если это необходимо. По умолчанию используется кодировка base64. Список встроенных кодировок см. в модуле email.encoders.

Необязательный аргумент policy по умолчанию принимает значение compat32.

_параметры передаются прямо в конструктор MIMEBase.

Изменено в версии 3.6: Добавлен параметр policy только для ключевых слов.

class email.mime.message.MIMEMessage(_msg, _subtype='rfc822', *, policy=compat32)

Модуль: email.mime.message

Подкласс класса MIMENonMultipart, класс MIMEMessage используется для создания MIME-объектов основного типа message. В качестве полезной нагрузки используется _msg, который должен быть экземпляром класса Message (или его подкласса), иначе возникает ошибка TypeError.

Необязательное значение _subtype задает подтип сообщения; по умолчанию оно равно rfc822.

Необязательный аргумент policy по умолчанию принимает значение compat32.

Изменено в версии 3.6: Добавлен параметр policy только для ключевых слов.

class email.mime.text.MIMEText(_text, _subtype='plain', _charset=None, *, policy=compat32)

Модуль: email.mime.text

Подкласс MIMENonMultipart, класс MIMEText используется для создания MIME-объектов основного типа text. _text - это строка для полезной нагрузки. _subtype - второстепенный тип, по умолчанию plain. _charset - набор символов текста, передается в качестве аргумента конструктору MIMENonMultipart; по умолчанию принимает значение us-ascii, если строка содержит только кодовые точки ascii, и utf-8 в противном случае. Параметр _charset принимает либо строку, либо экземпляр Charset.

Если аргумент _charset явно не установлен в None, созданный объект MIMEText будет иметь как заголовок Content-Type с параметром charset, так и заголовок Content-Transfer-Encoding. Это означает, что последующий вызов set_payload не приведет к получению закодированной полезной нагрузки, даже если в команде set_payload будет передан charset. Вы можете «сбросить» это поведение, удалив заголовок Content-Transfer-Encoding, после чего вызов set_payload автоматически закодирует новую полезную нагрузку (и добавит новый заголовок Content-Transfer-Encoding).

Необязательный аргумент policy по умолчанию принимает значение compat32.

Изменено в версии 3.5: _charset также принимает экземпляры Charset.

Изменено в версии 3.6: Добавлен параметр policy только для ключевых слов.