> **Источник:** https://python-all.ru/3.0/library/email.mime.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# [`email`](https://python-all.ru/3.0/library/email.html#module-email): Создание email- и MIME-объектов с нуля

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

Можно создать новую структуру объектов, создавая экземпляры `Message` и вручную добавляя вложения и все необходимые заголовки. Однако для MIME-сообщений пакет [`email`](https://python-all.ru/3.0/library/email.html#module-email) предоставляет несколько удобных подклассов, упрощающих задачу.

Вот классы:

#### `[email.mime.base.MIMEBase]class email.mime.base.MIMEBase(_maintype, _subtype, **_params)`

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

Это базовый класс для всех MIME-специфичных подклассов `Message`. Обычно не создают экземпляры непосредственно [`MIMEBase`](https://python-all.ru/3.0/library/email.mime.html#email.mime.base.MIMEBase), хотя это возможно. [`MIMEBase`](https://python-all.ru/3.0/library/email.mime.html#email.mime.base.MIMEBase) предоставляется в первую очередь как удобный базовый класс для более специализированных MIME-подклассов.

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

Класс [`MIMEBase`](https://python-all.ru/3.0/library/email.mime.html#email.mime.base.MIMEBase) всегда добавляет заголовок *Content-Type* (на основе *\_maintype*, *\_subtype* и *\_params*), а также заголовок *MIME-Version* (всегда установлен в `1.0`).

#### `[email.mime.nonmultipart.MIMENonMultipart]class email.mime.nonmultipart.MIMENonMultipart`

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

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

#### `[email.mime.multipart.MIMEMultipart]class email.mime.multipart.MIMEMultipart([_subtype[, boundary[, _subparts[, _params]]]])`

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

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

Необязательный параметр *boundary* – это строка границы multipart. Когда `None` (значение по умолчанию), граница вычисляется по мере необходимости.

*\_subparts* – это последовательность начальных подчастей для содержимого. Она должна преобразовываться в список. Новые подчасти можно присоединить к сообщению с помощью метода `Message.attach()`.

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

#### `[email.mime.application.MIMEApplication]class email.mime.application.MIMEApplication(_data[, _subtype[, _encoder[, **_params]]])`

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

Подкласс `MIMENonMultipart`, класс [`MIMEApplication`](https://python-all.ru/3.0/library/email.mime.html#email.mime.application.MIMEApplication) используется для представления объектов MIME-сообщений основного типа *application*. *\_data* – строка, содержащая необработанные байтовые данные. Необязательный параметр *\_subtype* задаёт MIME-подтип и по умолчанию равен *octet-потоку*.

Необязательный параметр *\_encoder* – это вызываемый объект (т.е. функция), который выполняет непосредственное кодирование данных для передачи. Этот вызываемый объект принимает один аргумент – экземпляр [`MIMEApplication`](https://python-all.ru/3.0/library/email.mime.html#email.mime.application.MIMEApplication). Он должен использовать `get_payload()` и `set_payload()` для изменения содержимого в закодированную форму. Также он должен при необходимости добавить заголовок *Content-Transfer-Encoding* или другие заголовки к объекту сообщения. Кодировка по умолчанию – base64. Список встроенных кодировщиков см. в модуле [`email.encoders`](https://python-all.ru/3.0/library/email.encoders.html#module-email.encoders).

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

#### `[email.mime.audio.MIMEAudio]class email.mime.audio.MIMEAudio(_audiodata[, _subtype[, _encoder[, **_params]]])`

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

Подкласс `MIMENonMultipart`, класс [`MIMEAudio`](https://python-all.ru/3.0/library/email.mime.html#email.mime.audio.MIMEAudio) используется для создания объектов MIME-сообщений основного типа *audio*. *\_audiodata* – строка, содержащая необработанные аудиоданные. Если эти данные могут быть декодированы стандартным модулем Python [`sndhdr`](https://python-all.ru/3.0/library/sndhdr.html#module-sndhdr), то подтип будет автоматически включён в заголовок *Content-Type*. В противном случае можно явно указать аудиоподтип через параметр *\_subtype*. Если подтип не удалось определить и *\_subtype* не был указан, возникает исключение [`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError).

Необязательный параметр *\_encoder* – это вызываемый объект (т.е. функция), который выполняет непосредственное кодирование аудиоданных для передачи. Этот вызываемый объект принимает один аргумент – экземпляр [`MIMEAudio`](https://python-all.ru/3.0/library/email.mime.html#email.mime.audio.MIMEAudio). Он должен использовать `get_payload()` и `set_payload()` для изменения содержимого в закодированную форму. Также он должен при необходимости добавить заголовок *Content-Transfer-Encoding* или другие заголовки к объекту сообщения. Кодировка по умолчанию – base64. Список встроенных кодировщиков см. в модуле [`email.encoders`](https://python-all.ru/3.0/library/email.encoders.html#module-email.encoders).

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

#### `[email.mime.image.MIMEImage]class email.mime.image.MIMEImage(_imagedata[, _subtype[, _encoder[, **_params]]])`

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

Подкласс `MIMENonMultipart`, класс [`MIMEImage`](https://python-all.ru/3.0/library/email.mime.html#email.mime.image.MIMEImage) используется для создания объектов MIME-сообщений основного типа *image*. *\_imagedata* – строка, содержащая необработанные данные изображения. Если эти данные могут быть декодированы стандартным модулем Python [`imghdr`](https://python-all.ru/3.0/library/imghdr.html#module-imghdr), то подтип будет автоматически включён в заголовок *Content-Type*. В противном случае можно явно указать подтип изображения через параметр *\_subtype*. Если подтип не удалось определить и *\_subtype* не был указан, возникает исключение [`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError).

Необязательный параметр *\_encoder* – это вызываемый объект (т.е. функция), который выполняет непосредственное кодирование данных изображения для передачи. Этот вызываемый объект принимает один аргумент – экземпляр [`MIMEImage`](https://python-all.ru/3.0/library/email.mime.html#email.mime.image.MIMEImage). Он должен использовать `get_payload()` и `set_payload()` для изменения содержимого в закодированную форму. Также он должен при необходимости добавить заголовок *Content-Transfer-Encoding* или другие заголовки к объекту сообщения. Кодировка по умолчанию – base64. Список встроенных кодировщиков см. в модуле [`email.encoders`](https://python-all.ru/3.0/library/email.encoders.html#module-email.encoders).

Параметры *\_params* передаются непосредственно конструктору `MIMEBase`.

#### `[email.mime.message.MIMEMessage]class email.mime.message.MIMEMessage(_msg[, _subtype])`

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

Подкласс `MIMENonMultipart`, класс [`MIMEMessage`](https://python-all.ru/3.0/library/email.mime.html#email.mime.message.MIMEMessage) используется для создания MIME-объектов основного типа *message*. *\_msg* используется в качестве полезной нагрузки и должен быть экземпляром класса `Message` (или его подкласса), иначе возникает исключение [`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError).

Необязательный *\_subtype* задаёт подтип сообщения; по умолчанию *rfc822*.

#### `[email.mime.text.MIMEText]class email.mime.text.MIMEText(_text[, _subtype[, _charset]])`

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

Подкласс `MIMENonMultipart`, класс [`MIMEText`](https://python-all.ru/3.0/library/email.mime.html#email.mime.text.MIMEText) используется для создания MIME-объектов основного типа *text*. *\_text* – строка с полезной нагрузкой. *\_subtype* – подтип, по умолчанию *plain*. *\_charset* – кодировка текста, передаваемая в качестве параметра конструктору `MIMENonMultipart`; по умолчанию `us-ascii`. Никакого угадывания или перекодирования текстовых данных не производится.
