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

email.policy.md

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

1> **Источник:** https://python-all.ru/3.4/library/email.policy.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 19.1.4. [`email.policy`](https://python-all.ru/3.4/library/email.policy.html#module-email.policy): Policy Objects89Новое в версии 3.3.1011Пакет [`email`](https://python-all.ru/3.4/library/email.html#module-email) в первую очередь предназначен для обработки сообщений электронной почты в соответствии с различными RFC, описывающими формат email и MIME. Однако общий формат email-сообщений – блок заголовков, каждый из которых состоит из имени и следующего за ним двоеточия и значения, затем пустая строка и произвольное «тело» – нашёл применение и за пределами электронной почты. Некоторые из этих применений достаточно строго следуют основным RFC, другие – нет. И даже при работе с электронной почтой иногда возникает необходимость отойти от строгого соблюдения RFC.1213Объекты Policy обеспечивают пакету email гибкость для обработки всех этих разнородных сценариев использования.1415Объект [`Policy`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy) инкапсулирует набор атрибутов и методов, управляющих поведением различных компонентов пакета email во время использования. Экземпляры [`Policy`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy) можно передавать различным классам и методам пакета email, чтобы изменить поведение по умолчанию. Устанавливаемые значения и их значения по умолчанию описаны ниже.1617Все классы пакета email используют политику по умолчанию. Эта политика называется [`Compat32`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Compat32) с соответствующим предопределённым экземпляром `compat32`. Она обеспечивает полную обратную совместимость (в некоторых случаях включая совместимость с ошибками) с версией пакета email, предшествующей Python 3.3.1819Первая часть этой документации описывает возможности [`Policy`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy) – [*абстрактного базового класса*](https://python-all.ru/3.4/glossary.html#term-abstract-base-class), определяющего общие для всех объектов политики возможности, включая `compat32`. Сюда входят некоторые методы-хуки, внутренне вызываемые пакетом email; пользовательская политика может переопределить их для получения иного поведения.2021При создании объекта [`Message`](https://python-all.ru/3.4/library/email.message.html#email.message.Message) он получает политику. По умолчанию это будет `compat32`, но можно указать другую политику. Если `Message` создаётся [`парсером`](https://python-all.ru/3.4/library/email.parser.html#module-email.parser), то переданная парсеру политика станет политикой создаваемого им `Message`. Если `Message` создаётся программой, то политику можно указать при его создании. Когда `Message` передаётся [`генератору`](https://python-all.ru/3.4/library/email.generator.html#module-email.generator), генератор по умолчанию использует политику из `Message`, но можно также передать генератору конкретную политику, которая переопределит сохранённую в объекте `Message`.2223Экземпляры [`Policy`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy) неизменяемы, но их можно клонировать, принимающие те же именованные аргументы, что и конструктор класса, и возвращающие новый экземпляр [`Policy`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy), который является копией исходного, но с изменёнными значениями указанных атрибутов.2425Например, следующий код можно использовать для чтения электронного письма из файла на диске и передачи его системной программе `sendmail` в Unix-системе:2627```python28>>> from email import message_from_binary_file29>>> from email.generator import BytesGenerator30>>> from email import policy31>>> from subprocess import Popen, PIPE32>>> with open('mymsg.txt', 'rb') as f:33...     msg = message_from_binary_file(f, policy=policy.default)34>>> p = Popen(['sendmail', msg['To'].addresses[0]], stdin=PIPE)35>>> g = BytesGenerator(p.stdin, policy=msg.policy.clone(linesep='\r\n'))36>>> g.flatten(msg)37>>> p.stdin.close()38>>> rc = p.wait()39```4041Здесь мы указываем [`BytesGenerator`](https://python-all.ru/3.4/library/email.generator.html#email.generator.BytesGenerator) использовать правильные разделители строк согласно RFC при создании двоичной строки для передачи в `stdin` программы `sendmail`, тогда как политика по умолчанию использовала бы разделители строк `\n`.4243Некоторые методы пакета email принимают именованный аргумент *policy*, позволяя переопределить политику для этого метода. Например, следующий код использует метод [`as_bytes()`](https://python-all.ru/3.4/library/email.message.html#email.message.Message.as_bytes) объекта *msg* из предыдущего примера и записывает сообщение в файл, используя собственные разделители строк для платформы, на которой он выполняется:4445```python46>>> import os47>>> with open('converted.txt', 'wb') as f:48...     f.write(msg.as_bytes(policy=msg.policy.clone(linesep=os.linesep)))491750```5152Объекты Policy также можно комбинировать с помощью оператора сложения, получая объект политики, настройки которого представляют собой комбинацию нестандартных значений суммируемых объектов:5354```python55>>> compat_SMTP = policy.compat32.clone(linesep='\r\n')56>>> compat_strict = policy.compat32.clone(raise_on_defect=True)57>>> compat_strict_SMTP = compat_SMTP + compat_strict58```5960Эта операция не является коммутативной; то есть порядок добавления объектов имеет значение. Для иллюстрации:6162```python63>>> policy100 = policy.compat32.clone(max_line_length=100)64>>> policy80 = policy.compat32.clone(max_line_length=80)65>>> apolicy = policy100 + policy8066>>> apolicy.max_line_length678068>>> apolicy = policy80 + policy10069>>> apolicy.max_line_length7010071```7273#### `class email.policy.Policy(**kw)`7475Это [*абстрактный базовый класс*](https://python-all.ru/3.4/glossary.html#term-abstract-base-class) для всех классов политик. Он предоставляет реализации по умолчанию для пары тривиальных методов, а также реализацию свойства неизменяемости, метода [`clone()`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy.clone) и семантику конструктора.7677Конструктору класса политики можно передавать различные ключевые аргументы. Аргументы, которые могут быть указаны, – это любые свойства, не являющиеся методами, этого класса, плюс любые дополнительные свойства, не являющиеся методами, конкретного класса. Значение, указанное в конструкторе, переопределит значение по умолчанию для соответствующего атрибута.7879Этот класс определяет следующие свойства, и, соответственно, значения для следующих могут быть переданы в конструктор любого класса политики:8081#### `max_line_length`8283Максимальная длина любой строки в сериализованном выводе, не считая символов конца строки. По умолчанию 78, согласно [**RFC 5322**](https://python-all.ru/3.4/library/email.policy.html). Значение `0` или [`None`](https://python-all.ru/3.4/library/constants.html#None) означает, что перенос строк вообще не должен выполняться.8485#### `linesep`8687Строка, используемая для завершения строк в сериализованном выводе. По умолчанию `\n`, поскольку это внутреннее правило завершения строк, используемое Python, хотя `\r\n` требуется RFC.8889#### `cte_type`9091Управляет типом кодирования передачи содержимого, которое может или должно использоваться. Возможные значения:9293| `7bit` | все данные должны быть «7-битно чистыми» (только ASCII). Это означает, что при необходимости данные будут закодированы с использованием quoted-printable или base64-кодировки. |94| --- | --- |95| `8bit` | Данные не обязаны быть чистыми 7-битными. Данные в заголовках по-прежнему должны содержать только ASCII и поэтому будут кодироваться (см. исключение «binary\_fold» ниже), но части тела могут использовать CTE `8bit`. |9697Значение `cte_type` равное `8bit` работает только с `BytesGenerator`, а не с `Generator`, поскольку строки не могут содержать двоичные данные. Если `Generator` работает в рамках политики, указывающей `cte_type=8bit`, он будет вести себя так, как если бы `cte_type` было `7bit`.9899#### `raise_on_defect`100101Если [`True`](https://python-all.ru/3.4/library/constants.html#True), любые обнаруженные дефекты будут вызываться как ошибки. Если [`False`](https://python-all.ru/3.4/library/constants.html#False) (по умолчанию), дефекты передаются методу [`register_defect()`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy.register_defect).102103Следующий метод [`Policy`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy) предназначен для вызова кодом, использующим библиотеку email, для создания экземпляров политик с произвольными настройками:104105#### `clone(**kw)`106107Возвращает новый экземпляр [`Policy`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy), атрибуты которого имеют те же значения, что и у текущего экземпляра, за исключением тех атрибутов, которым присвоены новые значения через именованные аргументы.108109Остальные методы [`Policy`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy) вызываются кодом пакета email и не предназначены для вызова приложением, использующим этот пакет. Пользовательская политика должна реализовывать все эти методы.110111#### `handle_defect(obj, defect)`112113Обрабатывает *дефект*, обнаруженный на *obj*. Когда пакет email вызывает этот метод, *defect* всегда будет подклассом `Defect`.114115Реализация по умолчанию проверяет флаг [`raise_on_defect`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy.raise_on_defect). Если он равен `True`, *defect* возбуждается как исключение. Если он равен `False` (по умолчанию), *obj* и *defect* передаются [`register_defect()`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy.register_defect).116117#### `register_defect(obj, defect)`118119Регистрирует *дефект* на *obj*. В пакете email *дефект* всегда является подклассом `Defect`.120121Реализация по умолчанию вызывает метод `append` атрибута `defects` объекта *obj*. Когда пакет email вызывает [`handle_defect`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy.handle_defect), *obj* обычно имеет атрибут `defects` с методом `append` method. Пользовательские типы объектов, используемые с пакетом email (например, пользовательские объекты `Message`), также должны предоставлять такой атрибут, иначе дефекты в разобранных сообщениях вызовут неожиданные ошибки.122123#### `header_max_count(name)`124125Возвращает максимально допустимое количество заголовков с именем *name*.126127Вызывается, когда заголовок добавляется к [`Message`](https://python-all.ru/3.4/library/email.message.html#email.message.Message) объекту. Если возвращаемое значение не равно `0` или `None`, и уже имеется количество заголовков с именем *name*, равное возвращённому значению, возбуждается [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError).128129Поскольку поведение по умолчанию `Message.__setitem__` заключается в добавлении значения к списку заголовков, можно случайно создать дублирующиеся заголовки, не осознавая этого. Этот метод позволяет программно ограничить количество экземпляров некоторых заголовков, которые могут быть добавлены в `Message`. (Парсер это ограничение не соблюдает; он добросовестно создаст столько заголовков, сколько есть в разбираемом сообщении.)130131Реализация по умолчанию возвращает `None` для всех имён заголовков.132133#### `header_source_parse(sourcelines)`134135Пакет email вызывает этот метод со списком строк, каждая строка заканчивается символами разделителя строк, найденными в разбираемом исходном тексте. Первая строка включает имя поля заголовка и разделитель. Все пробельные символы в исходнике сохраняются. Метод должен вернуть кортеж `(name, value)`, который будет сохранён в `Message` для представления разобранного заголовка.136137Если реализация хочет сохранить совместимость с существующими политиками пакета email, *name* должен быть именем с сохранённым регистром (все символы до разделителя ‘`:`‘), а *value* должно быть развёрнутым значением (все символы разделителя строк удалены, но пробельные символы сохранены), с удалёнными ведущими пробелами.138139*sourcelines* может содержать двоичные данные, экранированные суррогатами.140141Реализация по умолчанию отсутствует142143#### `header_store_parse(name, value)`144145Пакет email вызывает этот метод с именем и значением, предоставленными прикладной программой, когда она программно изменяет объект `Message` (в отличие от `Message`, созданного парсером). Метод должен вернуть кортеж `(name, value)`, который будет сохранён в `Message` для представления заголовка.146147Если реализация хочет сохранить совместимость с существующими политиками пакета email, *name* и *value* должны быть строками или подклассами строк, которые не изменяют содержимое переданных аргументов.148149Реализация по умолчанию отсутствует150151#### `header_fetch_parse(name, value)`152153Пакет email вызывает этот метод с *name* и *value*, в данный момент сохранёнными в `Message`, когда прикладная программа запрашивает этот заголовок; что бы метод ни вернул, это и передаётся прикладной программе в качестве значения запрашиваемого заголовка. Обратите внимание, что в `Message` может храниться более одного заголовка с одним и тем же именем; методу передаются конкретные имя и значение заголовка, который должен быть возвращён приложению.154155*value* может содержать бинарные данные с суррогатным экранированием. В возвращаемом методом значении не должно быть таких бинарных данных.156157Реализация по умолчанию отсутствует158159#### `fold(name, value)`160161Пакет email вызывает этот метод с *name* и *value*, в данный момент сохранёнными в `Message` для данного заголовка. Метод должен вернуть строку, представляющую этот заголовок, правильно «свёрнутым» (в соответствии с настройками политики), объединяя *name* с *value* и вставляя символы [`linesep`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy.linesep) в соответствующих местах. См. [**RFC 5322**](https://python-all.ru/3.4/library/email.policy.html) для обсуждения правил сворачивания заголовков email.162163*value* может содержать бинарные данные с суррогатным экранированием. В возвращаемой методом строке не должно быть таких бинарных данных.164165#### `fold_binary(name, value)`166167То же, что и [`fold()`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy.fold), за исключением того, что возвращаемое значение должно быть объектом bytes, а не строкой.168169*value* может содержать бинарные данные с суррогатным экранированием. Они могут быть преобразованы обратно в бинарные данные в возвращаемом байтовом объекте.170171#### `class email.policy.Compat32(**kw)`172173Этот конкретный [`Policy`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy) является политикой обратной совместимости. Он воспроизводит поведение пакета email в Python 3.2. Модуль [`policy`](https://python-all.ru/3.4/library/email.policy.html#module-email.policy) также определяет экземпляр этого класса, `compat32`, который используется в качестве политики по умолчанию. Таким образом, поведение пакета email по умолчанию заключается в сохранении совместимости с Python 3.2.174175Класс предоставляет следующие конкретные реализации абстрактных методов [`Policy`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy):176177#### `header_source_parse(sourcelines)`178179Имя разбирается как всё до символа ‘`:`‘ и возвращается без изменений. Значение определяется путём удаления ведущих пробелов из оставшейся части первой строки, объединения всех последующих строк вместе и удаления всех завершающих символов возврата каретки или перевода строки.180181#### `header_store_parse(name, value)`182183Имя и значение возвращаются без изменений.184185#### `header_fetch_parse(name, value)`186187Если значение содержит двоичные данные, оно преобразуется в объект [`Header`](https://python-all.ru/3.4/library/email.header.html#email.header.Header) с использованием charset `unknown-8bit`. В противном случае оно возвращается без изменений.188189#### `fold(name, value)`190191Заголовки сворачиваются с использованием алгоритма сворачивания [`Header`](https://python-all.ru/3.4/library/email.header.html#email.header.Header), который сохраняет существующие разрывы строк в значении и оборачивает каждую результирующую строку до `max_line_length`. Не-ASCII двоичные данные кодируются CTE с использованием charset `unknown-8bit`.192193#### `fold_binary(name, value)`194195Заголовки сворачиваются с использованием алгоритма сворачивания [`Header`](https://python-all.ru/3.4/library/email.header.html#email.header.Header), который сохраняет существующие разрывы строк в значении и оборачивает каждую результирующую строку до `max_line_length`. Если `cte_type` равен `7bit`, не-ASCII двоичные данные кодируются CTE с использованием charset `unknown-8bit`. В противном случае используется исходный заголовок, с его существующими разрывами строк и любыми (не соответствующими RFC) двоичными данными, которые он может содержать.196197> **Примечание**198>199> The documentation below describes new policies that are included in the standard library on a [*provisional basis*](https://python-all.ru/3.4/glossary.html#term-provisional-package). Backwards incompatible changes (up to and including removal of the feature) may occur if deemed necessary by the core developers.200201#### `class email.policy.EmailPolicy(**kw)`202203Этот конкретный [`Policy`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy) обеспечивает поведение, предназначенное для полного соответствия текущим RFC email. К ним относятся (но не ограничиваясь) [**RFC 5322**](https://python-all.ru/3.4/library/email.policy.html), [**RFC 2047**](https://python-all.ru/3.4/library/email.policy.html) и текущие MIME RFC.204205Эта политика добавляет новые алгоритмы разбора и сворачивания заголовков. Вместо простых строк заголовки являются подклассами `str` с атрибутами, которые зависят от типа поля. Алгоритм разбора и сворачивания полностью реализует [**RFC 2047**](https://python-all.ru/3.4/library/email.policy.html) и [**RFC 5322**](https://python-all.ru/3.4/library/email.policy.html).206207В дополнение к настраиваемым атрибутам, перечисленным выше и относящимся ко всем политикам, эта политика добавляет следующие дополнительные атрибуты:208209#### `refold_source`210211If the value for a header in the `Message` object originated from a [`parser`](https://python-all.ru/3.4/library/email.parser.html#module-email.parser) (as opposed to being set by a program), this attribute indicates whether or not a generator should refold that value when transforming the message back into stream form. The possible values are:212213| `none` | все исходные значения используют исходное сворачивание |214| --- | --- |215| `long` | исходные значения, содержащие строки длиннее `max_line_length`, будут переформированы |216| `all` | все значения сворачиваются заново. |217218По умолчанию `long`.219220#### `header_factory`221222Вызываемый объект, который принимает два аргумента, `name` и `value`, где `name` – это имя поля заголовка, а `value` – развёрнутое значение поля заголовка, и возвращает подкласс строки, представляющий этот заголовок. Предоставляется стандартная `header_factory` (см. [`headerregistry`](https://python-all.ru/3.4/library/email.headerregistry.html#module-email.headerregistry)), которая понимает некоторые типы полей заголовков [**RFC 5322**](https://python-all.ru/3.4/library/email.policy.html). (В настоящее время поля адресов и дат обрабатываются особым образом, а все остальные поля считаются неструктурированными. Этот список будет дополнен до того, как расширение будет помечено как стабильное.)223224#### `content_manager`225226Объект как минимум с двумя методами: get\_content и set\_content. Когда вызывается метод `get_content()` или `set_content()` объекта [`Message`](https://python-all.ru/3.4/library/email.message.html#email.message.Message), он вызывает соответствующий метод этого объекта, передавая ему объект сообщения в качестве первого аргумента, а также любые аргументы или ключевые слова, переданные в качестве дополнительных. По умолчанию `content_manager` установлен в [`raw_data_manager`](https://python-all.ru/3.4/library/email.contentmanager.html#email.contentmanager.raw_data_manager).227228Новое в версии 3.4.229230Класс предоставляет следующие конкретные реализации абстрактных методов [`Policy`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy):231232#### `header_max_count(name)`233234Возвращает значение атрибута [`max_count`](https://python-all.ru/3.4/library/email.headerregistry.html#email.headerregistry.BaseHeader.max_count) специализированного класса, используемого для представления заголовка с заданным именем.235236#### `header_source_parse(sourcelines)`237238Реализация этого метода такая же, как для политики [`Compat32`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Compat32).239240#### `header_store_parse(name, value)`241242Имя возвращается без изменений. Если входное значение имеет атрибут `name`, и он совпадает с *name* без учёта регистра, значение возвращается без изменений. В противном случае *name* и *value* передаются в `header_factory`, и полученный объект заголовка возвращается в качестве значения. В этом случае возбуждается `ValueError`, если входное значение содержит символы CR или LF.243244#### `header_fetch_parse(name, value)`245246Если значение имеет атрибут `name`, оно возвращается без изменений. В противном случае *name* и *value* с удалёнными символами CR или LF передаются в `header_factory`, и возвращается полученный объект заголовка. Любые суррогатные байты преобразуются в глиф неизвестного символа Unicode.247248#### `fold(name, value)`249250Сворачивание заголовков управляется настройкой политики [`refold_source`](https://python-all.ru/3.4/library/email.policy.html#email.policy.EmailPolicy.refold_source). Значение считается «исходным значением» тогда и только тогда, когда оно не имеет атрибута `name` (наличие атрибута `name` означает, что это какой-то объект заголовка). Если исходное значение необходимо переформировать в соответствии с политикой, оно преобразуется в объект заголовка путём передачи *name* и *value* с удалёнными символами CR и LF в `header_factory`. Сворачивание объекта заголовка выполняется вызовом его метода `fold` с текущей политикой.251252Исходные значения разбиваются на строки с помощью [`splitlines()`](https://python-all.ru/3.4/library/stdtypes.html#str.splitlines). Если значение не нужно переформировывать, строки объединяются обратно с использованием `linesep` из политики и возвращаются. Исключение составляют строки, содержащие не-ASCII двоичные данные. В этом случае значение переформировывается независимо от настройки `refold_source`, что приводит к кодированию двоичных данных с помощью CTE, используя кодировку `unknown-8bit`.253254#### `fold_binary(name, value)`255256То же, что и [`fold()`](https://python-all.ru/3.4/library/email.policy.html#email.policy.EmailPolicy.fold), если [`cte_type`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy.cte_type) равно `7bit`, за исключением того, что возвращаемое значение – это байты.257258Если [`cte_type`](https://python-all.ru/3.4/library/email.policy.html#email.policy.Policy.cte_type) равно `8bit`, не-ASCII двоичные данные преобразуются обратно в байты. Заголовки с двоичными данными не переформировываются, независимо от настройки `refold_header`, поскольку невозможно определить, состоят ли двоичные данные из однобайтовых или многобайтовых символов.259260Следующие экземпляры [`EmailPolicy`](https://python-all.ru/3.4/library/email.policy.html#email.policy.EmailPolicy) предоставляют значения по умолчанию, подходящие для конкретных областей применения. Обратите внимание, что в будущем поведение этих экземпляров (в частности, экземпляра `HTTP`) может быть скорректировано для ещё более точного соответствия RFC, имеющим отношение к их областям.261262#### `email.policy.default`263264Экземпляр `EmailPolicy` со всеми значениями по умолчанию без изменений. Эта политика использует стандартные для Python окончания строк `\n`, а не правильные по RFC `\r\n`.265266#### `email.policy.SMTP`267268Подходит для сериализации сообщений в соответствии с email RFC. Как и `default`, но с `linesep`, установленным в `\r\n`, что соответствует RFC.269270#### `email.policy.HTTP`271272Подходит для сериализации заголовков для использования в HTTP-трафике. Как и `SMTP`, за исключением того, что `max_line_length` установлено в `None` (без ограничений).273274#### `email.policy.strict`275276Удобный экземпляр. То же, что и `default`, за исключением того, что `raise_on_defect` установлено в `True`. Это позволяет сделать любую политику строгой, написав:277278```python279somepolicy + policy.strict280```281282Со всеми этими [`EmailPolicies`](https://python-all.ru/3.4/library/email.policy.html#email.policy.EmailPolicy) эффективный API пакета email изменяется по сравнению с API Python 3.2 следующим образом:283284> - Установка заголовка в [`Message`](https://python-all.ru/3.4/library/email.message.html#email.message.Message) приводит к разбору этого заголовка и созданию объекта заголовка.285> - Получение значения заголовка из [`Message`](https://python-all.ru/3.4/library/email.message.html#email.message.Message) приводит к разбору этого заголовка и созданию и возврату объекта заголовка.286> - Любой объект заголовка или любой заголовок, который пересвёртывается в соответствии с настройками политики, свёртывается с использованием алгоритма, полностью реализующего алгоритмы свёртки RFC, включая знание того, где требуются и разрешены закодированные слова.287288С точки зрения приложения это означает, что любой заголовок, полученный через [`Message`](https://python-all.ru/3.4/library/email.message.html#email.message.Message), является объектом заголовка с дополнительными атрибутами, строковое значение которого – полностью декодированное значение заголовка в Unicode. Аналогично, заголовку может быть присвоено новое значение или создан новый заголовок с использованием строки Unicode, и политика позаботится о преобразовании строки Unicode в правильную форму, закодированную в соответствии с RFC.289290Объекты заголовков и их атрибуты описаны в [`headerregistry`](https://python-all.ru/3.4/library/email.headerregistry.html#module-email.headerregistry).291