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

email.mime.md

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

1> **Источник:** https://python-all.ru/2.7/library/email.mime.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 18.1.4. [`email.mime`](https://python-all.ru/2.7/library/email.mime.html#module-email.mime): Создание email и MIME объектов с нуля89Обычно структура объекта сообщения получается передачей файла или текста парсеру, который разбирает текст и возвращает корневой объект сообщения. Однако можно также построить полную структуру сообщения с нуля или даже отдельные [`Message`](https://python-all.ru/2.7/library/email.message.html#email.message.Message) объекты вручную. Более того, можно взять существующую структуру и добавить новые [`Message`](https://python-all.ru/2.7/library/email.message.html#email.message.Message) объекты, перемещать их и т.д. Это делает очень удобным интерфейс для разделения и обработки MIME сообщений.1011Можно создать новую структуру объекта, создавая экземпляры [`Message`](https://python-all.ru/2.7/library/email.message.html#email.message.Message) , добавляя вложения и все соответствующие заголовки вручную. Однако для MIME-сообщений пакет [`email`](https://python-all.ru/2.7/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/2.7/library/email.message.html#email.message.Message). Обычно не создаются экземпляры непосредственно [`MIMEBase`](https://python-all.ru/2.7/library/email.mime.html#email.mime.base.MIMEBase), хотя это возможно. [`MIMEBase`](https://python-all.ru/2.7/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/2.7/library/email.message.html#email.message.Message.add_header).2223Класс [`MIMEBase`](https://python-all.ru/2.7/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/2.7/library/email.mime.html#email.mime.base.MIMEBase), это промежуточный базовый класс для MIME-сообщений, которые не являются *multipart*. Основная цель этого класса – предотвратить использование метода [`attach()`](https://python-all.ru/2.7/library/email.message.html#email.message.Message.attach), который имеет смысл только для сообщений *multipart*. Если [`attach()`](https://python-all.ru/2.7/library/email.message.html#email.message.Message.attach) вызывается, возбуждается исключение [`MultipartConversionError`](https://python-all.ru/2.7/library/email.errors.html#email.errors.MultipartConversionError).3031Новое в версии 2.2.2.3233#### `class email.mime.multipart.MIMEMultipart([_subtype[, boundary[, _subparts[, _params]]]])`3435Модуль: `email.mime.multipart`3637Подкласс [`MIMEBase`](https://python-all.ru/2.7/library/email.mime.html#email.mime.base.MIMEBase), это промежуточный базовый класс для MIME-сообщений, которые являются *multipart*. Необязательный параметр *\_subtype* по умолчанию равен *mixed*, но может использоваться для указания подтипа сообщения. Заголовок *Content-Type* со значением *multipart/\_subtype* будет добавлен к объекту сообщения. Также будет добавлен заголовок *MIME-Version*.3839Необязательный параметр *boundary* – строка границы для multipart. Если `None` (по умолчанию), граница вычисляется при необходимости (например, при сериализации сообщения).4041*\_subparts* – последовательность начальных подчастей для полезной нагрузки. Эта последовательность должна быть преобразуема в список. Новые подчасти всегда можно присоединить к сообщению с помощью метода [`Message.attach`](https://python-all.ru/2.7/library/email.message.html#email.message.Message.attach).4243Дополнительные параметры для заголовка *Content-Type* берутся из именованных аргументов или передаются в аргумент *\_params*, который является словарём именованных аргументов.4445Новое в версии 2.2.2.4647#### `class email.mime.application.MIMEApplication(_data[, _subtype[, _encoder[, **_params]]])`4849Модуль: `email.mime.application`5051Подкласс [`MIMENonMultipart`](https://python-all.ru/2.7/library/email.mime.html#email.mime.nonmultipart.MIMENonMultipart). Класс [`MIMEApplication`](https://python-all.ru/2.7/library/email.mime.html#email.mime.application.MIMEApplication) используется для представления объектов MIME-сообщений с основным типом *application*. *\_data* – строка, содержащая необработанные байтовые данные. Необязательный параметр *\_subtype* задаёт подтип MIME; по умолчанию *поток октетов*.5253Необязательный параметр *\_encoder* – это вызываемый объект (т.е. функция), который выполняет фактическое кодирование данных для передачи. Этот вызываемый объект принимает один аргумент – экземпляр [`MIMEApplication`](https://python-all.ru/2.7/library/email.mime.html#email.mime.application.MIMEApplication). Он должен использовать [`get_payload()`](https://python-all.ru/2.7/library/email.message.html#email.message.Message.get_payload) и [`set_payload()`](https://python-all.ru/2.7/library/email.message.html#email.message.Message.set_payload) для преобразования полезной нагрузки в закодированную форму. Также он должен при необходимости добавить заголовок *Content-Transfer-Encoding* или другие заголовки к объекту сообщения. Кодирование по умолчанию – base64. Список встроенных кодировщиков приведён в модуле [`email.encoders`](https://python-all.ru/2.7/library/email.encoders.html#module-email.encoders).5455*\_params* передаются напрямую конструктору базового класса.5657Новое в версии 2.5.5859#### `class email.mime.audio.MIMEAudio(_audiodata[, _subtype[, _encoder[, **_params]]])`6061Модуль: `email.mime.audio`6263Подкласс [`MIMENonMultipart`](https://python-all.ru/2.7/library/email.mime.html#email.mime.nonmultipart.MIMENonMultipart). Класс [`MIMEAudio`](https://python-all.ru/2.7/library/email.mime.html#email.mime.audio.MIMEAudio) используется для создания MIME-сообщений с основным типом *audio*. *\_audiodata* – строка с необработанными аудиоданными. Если эти данные можно декодировать стандартным модулем Python [`sndhdr`](https://python-all.ru/2.7/library/sndhdr.html#module-sndhdr), то подтип будет автоматически включён в заголовок *Content-Type*. В противном случае можно явно указать аудиоподтип через параметр *\_subtype*. Если подтип не удалось определить и *\_subtype* не был указан, возбуждается [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError).6465Необязательный *\_encoder* – это вызываемый объект (т.е. функция), который выполняет непосредственное кодирование аудиоданных для передачи. Этот вызываемый объект принимает один аргумент – экземпляр [`MIMEAudio`](https://python-all.ru/2.7/library/email.mime.html#email.mime.audio.MIMEAudio). Он должен использовать [`get_payload()`](https://python-all.ru/2.7/library/email.message.html#email.message.Message.get_payload) и [`set_payload()`](https://python-all.ru/2.7/library/email.message.html#email.message.Message.set_payload), чтобы преобразовать полезную нагрузку в закодированную форму. Также он должен при необходимости добавить заголовки *Content-Transfer-Encoding* или другие заголовки к объекту сообщения. По умолчанию используется кодировка base64. Список встроенных кодировщиков приведён в модуле [`email.encoders`](https://python-all.ru/2.7/library/email.encoders.html#module-email.encoders).6667*\_params* передаются напрямую конструктору базового класса.6869#### `class email.mime.image.MIMEImage(_imagedata[, _subtype[, _encoder[, **_params]]])`7071Модуль: `email.mime.image`7273Подкласс [`MIMENonMultipart`](https://python-all.ru/2.7/library/email.mime.html#email.mime.nonmultipart.MIMENonMultipart). Класс [`MIMEImage`](https://python-all.ru/2.7/library/email.mime.html#email.mime.image.MIMEImage) используется для создания MIME-сообщений с основным типом *image*. *\_imagedata* – строка с необработанными данными изображения. Если эти данные можно декодировать стандартным модулем Python [`imghdr`](https://python-all.ru/2.7/library/imghdr.html#module-imghdr), то подтип будет автоматически включён в заголовок *Content-Type*. В противном случае можно явно указать подтип изображения через параметр *\_subtype*. Если подтип не удалось определить и *\_subtype* не был указан, возбуждается [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError).7475Необязательный *\_encoder* – это вызываемый объект (т.е. функция), который выполняет непосредственное кодирование данных изображения для передачи. Этот вызываемый объект принимает один аргумент – экземпляр [`MIMEImage`](https://python-all.ru/2.7/library/email.mime.html#email.mime.image.MIMEImage). Он должен использовать [`get_payload()`](https://python-all.ru/2.7/library/email.message.html#email.message.Message.get_payload) и [`set_payload()`](https://python-all.ru/2.7/library/email.message.html#email.message.Message.set_payload), чтобы преобразовать полезную нагрузку в закодированную форму. Также он должен при необходимости добавить заголовки *Content-Transfer-Encoding* или другие заголовки к объекту сообщения. По умолчанию используется кодировка base64. Список встроенных кодировщиков приведён в модуле [`email.encoders`](https://python-all.ru/2.7/library/email.encoders.html#module-email.encoders).7677*\_params* передаются напрямую конструктору [`MIMEBase`](https://python-all.ru/2.7/library/email.mime.html#email.mime.base.MIMEBase).7879#### `class email.mime.message.MIMEMessage(_msg[, _subtype])`8081Модуль: `email.mime.message`8283Подкласс [`MIMENonMultipart`](https://python-all.ru/2.7/library/email.mime.html#email.mime.nonmultipart.MIMENonMultipart), класс [`MIMEMessage`](https://python-all.ru/2.7/library/email.mime.html#email.mime.message.MIMEMessage) используется для создания MIME-объектов основного типа *message*. *\_msg* используется в качестве полезной нагрузки и должен быть экземпляром класса [`Message`](https://python-all.ru/2.7/library/email.message.html#email.message.Message) (или его подкласса), в противном случае возбуждается исключение [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError).8485Необязательный *\_subtype* задаёт подтип сообщения; по умолчанию *rfc822*.8687#### `class email.mime.text.MIMEText(_text[, _subtype[, _charset]])`8889Модуль: `email.mime.text`9091Подкласс [`MIMENonMultipart`](https://python-all.ru/2.7/library/email.mime.html#email.mime.nonmultipart.MIMENonMultipart). Класс [`MIMEText`](https://python-all.ru/2.7/library/email.mime.html#email.mime.text.MIMEText) используется для создания MIME-объектов с основным типом *text*. *\_text* – строка содержимого (payload). *\_subtype* – это подтип, по умолчанию *plain*. *\_charset* – это кодировка текста, передаваемая в качестве параметра конструктору [`MIMENonMultipart`](https://python-all.ru/2.7/library/email.mime.html#email.mime.nonmultipart.MIMENonMultipart); по умолчанию `us-ascii`. Если *\_text* в юникоде, он кодируется с помощью *output\_charset* из *\_charset*, в противном случае используется как есть.9293Изменено в версии 2.4: Ранее устаревший аргумент *\_encoding* был удалён. Кодирование Content-Transfer-Encoding теперь происходит неявно на основе аргумента *\_charset*.9495Если параметр `_charset` явно не установлен в `None`, созданный объект MIMEText будет содержать как заголовок *Content-Type* с параметром `charset`, так и заголовок *Content-Transfer-Encoding*. Это означает, что последующий вызов `set_payload` не приведёт к кодированию содержимого, даже если кодировка передана в команде `set_payload`. Можно «сбросить» это поведение, удалив заголовок `Content-Transfer-Encoding`, после чего вызов `set_payload` автоматически закодирует новое содержимое (и добавит новый заголовок *Content-Transfer-Encoding*).96