Документация Python неофициальный перевод

email.mime.md

88 строк · 16.6 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.3/library/email.mime.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 19.1.6. [`email.mime`](https://python-all.ru/3.3/library/email.mime.html#module-email.mime): Создание объектов email и MIME с нуля89Обычно структура объекта сообщения получается путём передачи файла или текста парсеру, который разбирает текст и возвращает корневой объект сообщения. Однако можно также собрать полную структуру сообщения с нуля или даже вручную создать отдельные объекты [`Message`](https://python-all.ru/3.3/library/email.message.html#email.message.Message). Фактически можно взять существующую структуру и добавить новые объекты [`Message`](https://python-all.ru/3.3/library/email.message.html#email.message.Message), перемещать их и так далее. Это даёт очень удобный интерфейс для нарезки MIME-сообщений.1011Можно создать новую структуру объектов, создав экземпляры [`Message`](https://python-all.ru/3.3/library/email.message.html#email.message.Message), вручную добавив вложения и все необходимые заголовки. Однако для MIME-сообщений пакет [`email`](https://python-all.ru/3.3/library/email.html#module-email) предоставляет несколько удобных подклассов, упрощающих задачу.1213Вот классы:1415#### `class email.mime.base.MIMEBase(_maintype, _subtype, **_params)`1617Модуль: `email.mime.base`1819Это базовый класс для всех MIME-специфичных подклассов [`Message`](https://python-all.ru/3.3/library/email.message.html#email.message.Message). Обычно не создают экземпляры непосредственно [`MIMEBase`](https://python-all.ru/3.3/library/email.mime.html#email.mime.base.MIMEBase), хотя это возможно. [`MIMEBase`](https://python-all.ru/3.3/library/email.mime.html#email.mime.base.MIMEBase) предоставляется в первую очередь как удобный базовый класс для более специализированных MIME-подклассов.2021*\_maintype* – это основной тип *Content-Type* (например, *text* или *image*), а *\_subtype* – второстепенный тип *Content-Type* (например, *plain* или *gif*). *\_params* – это словарь параметров (ключ/значение), который передаётся напрямую в [`Message.add_header`](https://python-all.ru/3.3/library/email.message.html#email.message.Message.add_header).2223Класс [`MIMEBase`](https://python-all.ru/3.3/library/email.mime.html#email.mime.base.MIMEBase) всегда добавляет заголовок *Content-Type* (на основе *\_maintype*, *\_subtype* и *\_params*), а также заголовок *MIME-Version* (всегда установлен в `1.0`).2425#### `class email.mime.nonmultipart.MIMENonMultipart`2627Модуль: `email.mime.nonmultipart`2829Подкласс [`MIMEBase`](https://python-all.ru/3.3/library/email.mime.html#email.mime.base.MIMEBase), этот класс является промежуточным базовым классом для MIME-сообщений, которые не являются *multipart*. Основная цель этого класса – предотвратить использование метода [`attach()`](https://python-all.ru/3.3/library/email.message.html#email.message.Message.attach), который имеет смысл только для *multipart*-сообщений. При вызове [`attach()`](https://python-all.ru/3.3/library/email.message.html#email.message.Message.attach) возникает исключение [`MultipartConversionError`](https://python-all.ru/3.3/library/email.errors.html#email.errors.MultipartConversionError).3031#### `class email.mime.multipart.MIMEMultipart(_subtype='mixed', boundary=None, _subparts=None, **_params)`3233Модуль: `email.mime.multipart`3435Подкласс [`MIMEBase`](https://python-all.ru/3.3/library/email.mime.html#email.mime.base.MIMEBase), этот класс является промежуточным базовым классом для MIME-сообщений, которые являются *multipart*. Необязательный параметр *\_subtype* по умолчанию равен *mixed*, но может использоваться для указания подтипа сообщения. В объект сообщения будет добавлен заголовок *Content-Type* со значением *multipart/\_subtype*. Также будет добавлен заголовок *MIME-Version*.3637Необязательный параметр *boundary* – это строка границы multipart. Если `None` (по умолчанию), граница вычисляется при необходимости (например, при сериализации сообщения).3839*\_subparts* – это последовательность начальных подчастей для полезной нагрузки. Эту последовательность можно преобразовать в список. Новые подчасти можно добавлять к сообщению с помощью метода [`Message.attach`](https://python-all.ru/3.3/library/email.message.html#email.message.Message.attach).4041Дополнительные параметры для заголовка *Content-Type* берутся из именованных аргументов или передаются в аргумент *\_params*, который является словарём именованных аргументов.4243#### `class email.mime.application.MIMEApplication(_data, _subtype='octet-stream', _encoder=email.encoders.encode_base64, **_params)`4445Модуль: `email.mime.application`4647Подкласс [`MIMENonMultipart`](https://python-all.ru/3.3/library/email.mime.html#email.mime.nonmultipart.MIMENonMultipart), класс [`MIMEApplication`](https://python-all.ru/3.3/library/email.mime.html#email.mime.application.MIMEApplication) используется для представления объектов MIME-сообщений основного типа *application*. *\_data* – это строка, содержащая необработанные байтовые данные. Необязательный параметр *\_subtype* задаёт подтип MIME и по умолчанию равен *поток октетов*.4849Необязательный параметр *\_encoder* – это вызываемый объект (функция), который выполняет фактическое кодирование данных для передачи. Этот вызываемый объект принимает один аргумент – экземпляр [`MIMEApplication`](https://python-all.ru/3.3/library/email.mime.html#email.mime.application.MIMEApplication). Он должен использовать [`get_payload()`](https://python-all.ru/3.3/library/email.message.html#email.message.Message.get_payload) и [`set_payload()`](https://python-all.ru/3.3/library/email.message.html#email.message.Message.set_payload) для преобразования полезной нагрузки в закодированную форму. Также он должен добавить заголовок *Content-Transfer-Encoding* или другие заголовки к объекту сообщения при необходимости. Кодирование по умолчанию – base64. Список встроенных кодировщиков см. в модуле [`email.encoders`](https://python-all.ru/3.3/library/email.encoders.html#module-email.encoders).5051*\_params* передаются напрямую конструктору базового класса.5253#### `class email.mime.audio.MIMEAudio(_audiodata, _subtype=None, _encoder=email.encoders.encode_base64, **_params)`5455Модуль: `email.mime.audio`5657Подкласс [`MIMENonMultipart`](https://python-all.ru/3.3/library/email.mime.html#email.mime.nonmultipart.MIMENonMultipart), класс [`MIMEAudio`](https://python-all.ru/3.3/library/email.mime.html#email.mime.audio.MIMEAudio) используется для создания объектов MIME-сообщений основного типа *audio*. *\_audiodata* – это строка, содержащая необработанные аудиоданные. Если эти данные могут быть декодированы стандартным модулем Python [`sndhdr`](https://python-all.ru/3.3/library/sndhdr.html#module-sndhdr), то подтип будет автоматически включён в заголовок *Content-Type*. В противном случае можно явно указать подтип аудио через аргумент *\_subtype*. Если второстепенный тип не удалось угадать, а *\_subtype* не был указан, то возникает исключение [`TypeError`](https://python-all.ru/3.3/library/exceptions.html#TypeError).5859Необязательный параметр *\_encoder* – это вызываемый объект (функция), который выполняет фактическое кодирование аудиоданных для передачи. Этот вызываемый объект принимает один аргумент – экземпляр [`MIMEAudio`](https://python-all.ru/3.3/library/email.mime.html#email.mime.audio.MIMEAudio). Он должен использовать [`get_payload()`](https://python-all.ru/3.3/library/email.message.html#email.message.Message.get_payload) и [`set_payload()`](https://python-all.ru/3.3/library/email.message.html#email.message.Message.set_payload) для преобразования полезной нагрузки в закодированную форму. Также он должен добавить заголовок *Content-Transfer-Encoding* или другие заголовки к объекту сообщения при необходимости. Кодирование по умолчанию – base64. Список встроенных кодировщиков см. в модуле [`email.encoders`](https://python-all.ru/3.3/library/email.encoders.html#module-email.encoders).6061*\_params* передаются напрямую конструктору базового класса.6263#### `class email.mime.image.MIMEImage(_imagedata, _subtype=None, _encoder=email.encoders.encode_base64, **_params)`6465Модуль: `email.mime.image`6667Подкласс [`MIMENonMultipart`](https://python-all.ru/3.3/library/email.mime.html#email.mime.nonmultipart.MIMENonMultipart), класс [`MIMEImage`](https://python-all.ru/3.3/library/email.mime.html#email.mime.image.MIMEImage) используется для создания объектов MIME-сообщений основного типа *image*. *\_imagedata* – это строка, содержащая необработанные данные изображения. Если эти данные могут быть декодированы стандартным модулем Python [`imghdr`](https://python-all.ru/3.3/library/imghdr.html#module-imghdr), то подтип будет автоматически включён в заголовок *Content-Type*. В противном случае можно явно указать подтип изображения через аргумент *\_subtype*. Если второстепенный тип не удалось угадать, а *\_subtype* не был указан, то возникает исключение [`TypeError`](https://python-all.ru/3.3/library/exceptions.html#TypeError).6869Необязательный параметр *\_encoder* – это вызываемый объект (функция), который выполняет фактическое кодирование данных изображения для передачи. Этот вызываемый объект принимает один аргумент – экземпляр [`MIMEImage`](https://python-all.ru/3.3/library/email.mime.html#email.mime.image.MIMEImage). Он должен использовать [`get_payload()`](https://python-all.ru/3.3/library/email.message.html#email.message.Message.get_payload) и [`set_payload()`](https://python-all.ru/3.3/library/email.message.html#email.message.Message.set_payload) для преобразования полезной нагрузки в закодированную форму. Также он должен добавить заголовок *Content-Transfer-Encoding* или другие заголовки к объекту сообщения при необходимости. Кодирование по умолчанию – base64. Список встроенных кодировщиков см. в модуле [`email.encoders`](https://python-all.ru/3.3/library/email.encoders.html#module-email.encoders).7071*\_params* передаются напрямую конструктору [`MIMEBase`](https://python-all.ru/3.3/library/email.mime.html#email.mime.base.MIMEBase).7273#### `class email.mime.message.MIMEMessage(_msg, _subtype='rfc822')`7475Модуль: `email.mime.message`7677Класс [`MIMEMessage`](https://python-all.ru/3.3/library/email.mime.html#email.mime.message.MIMEMessage) – подкласс [`MIMENonMultipart`](https://python-all.ru/3.3/library/email.mime.html#email.mime.nonmultipart.MIMENonMultipart), предназначен для создания MIME-объектов основного типа *message*. Параметр *\_msg* используется в качестве полезной нагрузки и должен быть экземпляром класса [`Message`](https://python-all.ru/3.3/library/email.message.html#email.message.Message) (или его подкласса), иначе возбуждается исключение [`TypeError`](https://python-all.ru/3.3/library/exceptions.html#TypeError).7879Необязательный *\_subtype* задаёт подтип сообщения; по умолчанию *rfc822*.8081#### `class email.mime.text.MIMEText(_text, _subtype='plain', _charset=None)`8283Модуль: `email.mime.text`8485A subclass of [`MIMENonMultipart`](https://python-all.ru/3.3/library/email.mime.html#email.mime.nonmultipart.MIMENonMultipart), the [`MIMEText`](https://python-all.ru/3.3/library/email.mime.html#email.mime.text.MIMEText) class is used to create MIME objects of major type *text*. *\_text* is the string for the payload. *\_subtype* is the minor type and defaults to *plain*. *\_charset* is the character set of the text and is passed as an argument to the [`MIMENonMultipart`](https://python-all.ru/3.3/library/email.mime.html#email.mime.nonmultipart.MIMENonMultipart) constructor; it defaults to `us-ascii` if the string contains only `ascii` codepoints, and `utf-8` otherwise.8687Если аргумент *\_charset* явно не установлен в `None`, создаваемый объект MIMEText будет иметь как заголовок *Content-Type* с параметром `charset`, так и заголовок *Content-Transfer-Endcoding*. Это означает, что последующий вызов `set_payload` не приведёт к кодированию полезной нагрузки, даже если кодировка передана в команде `set_payload`. Можно «сбросить» это поведение, удалив заголовок `Content-Transfer-Encoding`; после этого вызов `set_payload` автоматически закодирует новую полезную нагрузку (и добавит новый заголовок *Content-Transfer-Encoding*).88