email.contentmanager: Управление MIME-контентом
Исходный код: Lib/email/contentmanager.py
Новое в версии 3.6: 1
-
class email.contentmanager.ContentManager -
Базовый класс для менеджеров контента. Предоставляет стандартные механизмы регистрации преобразователей между MIME-контентом и другими представлениями, а также методы обработки
get_contentиset_content.-
get_content(msg, *args, **kw) -
Ищет функцию-обработчик на основе
mimetypeобъекта msg (см. следующий абзац), вызывает её, передавая все аргументы, и возвращает результат вызова. Ожидается, что обработчик извлечёт полезную нагрузку из msg и вернёт объект, кодирующий информацию об извлечённых данных.Для поиска обработчика ищутся следующие ключи в реестре, останавливаясь на первом найденном:
- строка, представляющая полное 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__). - 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().
-
Примеры менеджеров контента
В настоящее время пакет email предоставляет только один конкретный менеджер контента, raw_data_manager, хотя в будущем могут быть добавлены и другие. raw_data_manager является content_manager, предоставляемым EmailPolicy и его производными.
-
email.contentmanager.raw_data_manager -
Этот менеджер содержимого предоставляет только минимальный интерфейс помимо того, что предоставляется самим
Message: он работает только с текстом, сырыми байтовыми строками иMessageобъектами. Тем не менее, он предоставляет существенные преимущества по сравнению с базовым API:get_contentдля текстовой части вернёт строку Юникод без необходимости ручного декодирования,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, установите MIMEmaintypeна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. Если вход не может быть закодирован в указанной кодировке (например, если для cte указано7bitдля входных данных, содержащих не-ASCII символы), вызовитеValueError.- Для
strобъектов, если cte не задано, используйте эвристику для определения наиболее компактной кодировки. - Для
EmailMessage, в соответствии с RFC 2046, вызовите ошибку, если cte равноquoted-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 как временный модуль
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.7/library/email.contentmanager.html