email.contentmanager: Управление контентом MIME¶
Исходный код: Lib/email/contentmanager.py
Добавлено в версии 3.6: [1]
-
class
email.contentmanager.ContentManager¶ Базовый класс для менеджеров содержимого. Предоставляет стандартные механизмы реестра для регистрации преобразователей между содержимым MIME и другими представлениями, а также методы отправки
get_contentиset_content.-
get_content(msg, *args, **kw)¶ Ищет функцию бработчика на основе
mimetypemsg (см. следующий параграф), назовите его, пройдя через все аргументы и результат возвращает требования. Предполагается, что обработчик извлекет полезную нагрузку из объекта msg и возвращает an, который кодирует информацию о извлеченных данных.Чтобы найти обработчик, найдите в реестре следующие разделы, остановившись на первом найденном:
- строка, представляющий полный тип MIME (
maintype/subtype) - строка, представляющий
maintype - пустая строка
Если ни один из этих ключей не создает обработчика, вызовите
KeyErrorдля полного типа MIME.- строка, представляющий полный тип MIME (
-
set_content(msg, obj, *args, **kw)¶ Если
maintypeявляетсяmultipart, поднимитеTypeError; иначе ищите функцию обработчика на основе типа obj (см. следующий параграф), назовитеclear_content()на msg и вызовите функцию обработчика, пройдя через все аргументы. Предполагается, что обработчик будет преобразовывать и хранить obj в msg, возможно, также внося другие изменения в msg, такие как добавление различных заголовков MIME для кодирования информации, необходимой для интерпретации сохраненных данных.Чтобы найти обработчик, получите тип obj (
typ = type(obj)) и найдите в реестре следующие разделы, остановившись на первом найденном:- сам тип (
typ) - полное имя типа (
typ.__module__ + '.' + typ.__qualname__). - имя типа (
typ.__qualname__) - имя типа (
typ.__name__).
Если ни одна из указанных выше проверок не совпадает, повторите все приведенные выше проверки для каждого типа в MRO (
typ.__mro__). Наконец, если никакой другой ключ не дает обработчика, проверьте наличие обработчика для ключаNone. Если обработчик дляNoneотсутствует, создайтеKeyErrorдля полного имени типа.Также добавьте заголовок MIME-Version, если он отсутствует (см. также
MIMEPart).- сам тип (
-
add_get_handler(key, handler)¶ Запишите функцию handler в качестве обработчика для key. Возможные значения key см. в разделе
get_content().
-
add_set_handler(typekey, handler)¶ Сделайте запись handler как функции, чтобы звонить, когда объект типа, соответствующего typekey, будет передан к
set_content(). Возможные значения typekey см. в разделеset_content().
-
Сущности менеджера контента¶
В настоящее время пакет электронной почты предоставляет только один конкретный
менеджер содержимого, raw_data_manager, хотя в будущем может быть добавлено больше.
raw_data_manager представляет собой content_manager, обеспечиваемый EmailPolicy и его производными.
-
email.contentmanager.raw_data_manager¶ Этот контент-менеджер предоставляет только минимальный интерфейс, превосходящий интерфейс, предоставляемый самим
Message: он имеет дело только с текстом, необработанными байтами строки иMessageобъектами. Тем не менее, он обеспечивает значительные преимущества по сравнению с базовым API:get_contentна текстовой части будет возвращает a unicode строка без приложения, нуждающегося в ручном декодировании,set_contentпредоставляет богатый набор опций для управления заголовками, добавленными к части, и управления кодировка передачи контента, и он позволяет использовать различные методыadd_, тем самым упрощая создание многопартийных сообщений.-
email.contentmanager.get_content(msg, errors='replace')¶ Возвращает полезная нагрузка детали в виде строки (для
textдеталей), объектаEmailMessage(дляmessage/rfc822деталей) или объектаbytes(для всех других типов, не относящихся к нескольким частям). ПоднимитеKeyError, если вызываетсяmultipart. Если деталь являетсяtextдеталью и задана errors, используйте ее в качестве обработчика ошибок при декодировании полезной нагрузки в юникод. Обработчик ошибок по умолчанию -replace.
-
email.contentmanager.set_content(msg, <'str'>, subtype="plain", charset='utf-8', cte=None, disposition=None, filename=None, cid=None, params=None, headers=None)¶ -
email.contentmanager.set_content(msg, <'bytes'>, maintype, subtype, cte="base64", disposition=None, filename=None, cid=None, params=None, headers=None) -
email.contentmanager.set_content(msg, <'EmailMessage'>, cte=None, disposition=None, filename=None, cid=None, params=None, headers=None) Добавление заголовков и полезной нагрузки в msg:
Добавьте заголовок Content-Type с
maintype/subtypeзначение.- Для
str, устанавливает MIME,maintypeкtext, и устанавливает подтип в subtype, если определено, илиplain, если нет. - Для
bytesиспользуйте указанный maintype и subtype, или поднимитеTypeError, если они не определены. - Для объектов
EmailMessage, устанавливает maintype вmessage, и устанавливает подтип в subtype, если определено илиrfc822, если это не. Если subtype -partial, поднимите ошибку (объектыbytesдолжны быть используемый, чтобы построить частиmessage/partial).
Если charset обеспечен (который действителен только для
str), закодируйте строка к байтам, используя указанный набор символ. Значение по умолчанию -utf-8. Если указанный charset - известный алиас для стандартного имени кодировки MIME, используйте стандартную кодировку вместо этого.Если установлено значение cte, закодируйте полезную нагрузку с помощью указанного кодировка передачи содержимого и установите для заголовка Content-Transfer-Encoding значение значение. Возможными значения для cte являются
quoted-printable,base64,7bit,8bitиbinary. Если вход не может быть кодированный в указанном кодировка (например, указание cte7bitдля входа, содержащего не-ASCII значения), поднимитеValueError.- Для объектов
str, если cte не установлен эвристика использования, чтобы определить самый компактный кодировка. - Для
EmailMessage, за RFC 2046, поднимают ошибку, если ctequoted-printableилиbase64запрошенный для subtyperfc822, и для какого-либо cte кроме7bitдля subtypeexternal-body. Дляmessage/rfc822используйте8bit, если cte не указан. Для всего другого значения subtype используйте7bit.
Примечание
cte
binaryна самом деле еще не работает правильно. ОбъектEmailMessage, как измененоset_contentправилен, ноBytesGeneratorне преобразовывает в последовательную форму его правильно.Если disposition установлен, используйте его в качестве значение заголовка Content-Disposition. Если не определенный, и filename определен, добавьте заголовок с значение
attachment. Если disposition не указан и filename также не указан, не добавляйте заголовок. Единственные действительные значения для disposition -attachmentиinline.Если filename определен, используйте его в качестве значение параметра
filenameзаголовка Content-Disposition.Если задано значение cid, добавьте заголовок Content-ID с значением cid в качестве значение.
Если задано значение params, выполните итерацию метода
itemsи используйте результирующие пары(key, value)для установки дополнительных параметров в заголовке Content-Type.Если headers указан и является списком строки формы
headername: headervalueили списком объектовheader(отличающихся от строки наличиемnameатрибут), добавьте заголовки в msg.- Для
-
Сноски
| [1] | Первоначально добавлен в 3.4 как предварительный пакет |
