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

email.policy.md

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

1> **Источник:** https://python-all.ru/3.5/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.5/library/email.policy.html#module-email.policy): объекты Policy89Новое в версии 3.3.1011**Исходный код:** [Lib/email/policy.py](https://python-all.ru/src/3.5/Lib/email/policy.py)1213---1415Основное внимание пакета [`email`](https://python-all.ru/3.5/library/email.html#module-email) уделяется обработке email-сообщений, как описано в различных RFC по email и MIME. Однако общий формат email-сообщений (блок полей заголовка, каждое из которых состоит из имени, двоеточия и значения; весь блок, за которым следует пустая строка и произвольное «тело») оказался полезным и за пределами электронной почты. Некоторые из этих вариантов использования довольно близко следуют основным RFC, другие – нет. И даже при работе с email бывают случаи, когда желательно отступить от строгого соответствия RFC.1617Объекты Policy обеспечивают пакету email гибкость для обработки всех этих разнородных сценариев использования.1819Объект [`Policy`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy) инкапсулирует набор атрибутов и методов, управляющих поведением различных компонентов пакета email во время использования. Экземпляры [`Policy`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy) можно передавать различным классам и методам пакета email для изменения поведения по умолчанию. Устанавливаемые значения и их значения по умолчанию описаны ниже.2021Во всех классах пакета email используется политика по умолчанию. Эта политика называется [`Compat32`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Compat32), и ей соответствует предопределённый экземпляр [`compat32`](https://python-all.ru/3.5/library/email.policy.html#email.policy.compat32). Она обеспечивает полную обратную совместимость (в некоторых случаях включая совместимость с ошибками) с версией пакета email до Python 3.3.2223The first part of this documentation covers the features of [`Policy`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy), an [abstract base class](https://python-all.ru/3.5/glossary.html#term-abstract-base-class) that defines the features that are common to all policy objects, including [`compat32`](https://python-all.ru/3.5/library/email.policy.html#email.policy.compat32). This includes certain hook methods that are called internally by the email package, which a custom policy could override to obtain different behavior.2425Когда создаётся объект [`Message`](https://python-all.ru/3.5/library/email.message.html#email.message.Message), он получает политику. По умолчанию это будет [`compat32`](https://python-all.ru/3.5/library/email.policy.html#email.policy.compat32), но можно указать другую политику. Если `Message` создаётся с помощью [`parser`](https://python-all.ru/3.5/library/email.parser.html#module-email.parser), то политика, переданная парсеру, будет использоваться создаваемым им `Message`. Если `Message` создаётся программой, то политику можно указать при его создании. Когда `Message` передаётся в [`generator`](https://python-all.ru/3.5/library/email.generator.html#module-email.generator), генератор по умолчанию использует политику из `Message`, но можно также передать в генератор конкретную политику, которая переопределит ту, что хранится в объекте `Message`.2627Экземпляры [`Policy`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy) неизменяемы, но их можно клонировать, принимая те же ключевые аргументы, что и конструктор класса, и возвращая новый экземпляр [`Policy`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy), который является копией исходного, но с изменёнными значениями указанных атрибутов.2829В качестве примера, следующий код можно использовать для чтения email-сообщения из файла на диске и передачи его системной программе `sendmail` в Unix-системе:3031```pycon32>>> from email import message_from_binary_file33>>> from email.generator import BytesGenerator34>>> from email import policy35>>> from subprocess import Popen, PIPE36>>> with open('mymsg.txt', 'rb') as f:37...     msg = message_from_binary_file(f, policy=policy.default)38>>> p = Popen(['sendmail', msg['To'].addresses[0]], stdin=PIPE)39>>> g = BytesGenerator(p.stdin, policy=msg.policy.clone(linesep='\r\n'))40>>> g.flatten(msg)41>>> p.stdin.close()42>>> rc = p.wait()43```4445Здесь мы указываем [`BytesGenerator`](https://python-all.ru/3.5/library/email.generator.html#email.generator.BytesGenerator) использовать правильные по RFC символы разделителей строк при создании двоичной строки для передачи в `sendmail's` `stdin`, тогда как политика по умолчанию использовала бы разделители строк `\n`.4647Некоторые методы пакета email принимают ключевой аргумент *policy*, позволяя переопределить политику для этого метода. Например, следующий код использует метод [`as_bytes()`](https://python-all.ru/3.5/library/email.message.html#email.message.Message.as_bytes) объекта *msg* из предыдущего примера и записывает сообщение в файл, используя собственные разделители строк для платформы, на которой он выполняется:4849```python50>>> import os51>>> with open('converted.txt', 'wb') as f:52...     f.write(msg.as_bytes(policy=msg.policy.clone(linesep=os.linesep)))531754```5556Объекты Policy также можно комбинировать с помощью оператора сложения, получая объект политики, настройки которого представляют собой комбинацию нестандартных значений суммируемых объектов:5758```python59>>> compat_SMTP = policy.compat32.clone(linesep='\r\n')60>>> compat_strict = policy.compat32.clone(raise_on_defect=True)61>>> compat_strict_SMTP = compat_SMTP + compat_strict62```6364Эта операция не является коммутативной; то есть порядок добавления объектов имеет значение. Для иллюстрации:6566```python67>>> policy100 = policy.compat32.clone(max_line_length=100)68>>> policy80 = policy.compat32.clone(max_line_length=80)69>>> apolicy = policy100 + policy8070>>> apolicy.max_line_length718072>>> apolicy = policy80 + policy10073>>> apolicy.max_line_length7410075```7677#### `class email.policy.Policy(**kw)`7879Это [абстрактный базовый класс](https://python-all.ru/3.5/glossary.html#term-abstract-base-class) для всех классов политики. Он предоставляет реализации по умолчанию для пары тривиальных методов, а также реализацию свойства неизменяемости, метода [`clone()`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy.clone) и семантики конструктора.8081Конструктору класса политики можно передавать различные ключевые аргументы. Аргументы, которые могут быть указаны, – это любые свойства, не являющиеся методами, этого класса, плюс любые дополнительные свойства, не являющиеся методами, конкретного класса. Значение, указанное в конструкторе, переопределит значение по умолчанию для соответствующего атрибута.8283Этот класс определяет следующие свойства, и, соответственно, значения для следующих могут быть переданы в конструктор любого класса политики:8485#### `max_line_length`8687Максимальная длина любой строки в сериализованном выводе, не считая символа(ов) конца строки. По умолчанию 78, согласно [**RFC 5322**](https://python-all.ru/3.5/library/email.policy.html). Значение `0` или [`None`](https://python-all.ru/3.5/library/constants.html#None) указывает, что перенос строк вообще не должен выполняться.8889#### `linesep`9091Строка, используемая для завершения строк в сериализованном выводе. По умолчанию `\n`, поскольку это внутренний стандарт окончания строк, используемый Python, хотя `\r\n` требуется RFC.9293#### `cte_type`9495Управляет типом кодирования передачи содержимого, которое может или должно использоваться. Возможные значения:9697| `7bit` | все данные должны быть «7-битно чистыми» (только ASCII). Это означает, что при необходимости данные будут закодированы с использованием quoted-printable или base64-кодировки. |98| --- | --- |99| `8bit` | Данные не обязаны быть 7-битными. Данные в заголовках по-прежнему должны состоять только из ASCII и поэтому будут кодироваться (исключение см. в «binary\_fold» ниже), но части тела могут использовать CTE `8bit`. |100101Значение `cte_type` равное `8bit` работает только с `BytesGenerator`, а не с `Generator`, потому что строки не могут содержать двоичные данные. Если `Generator` работает в рамках политики, задающей `cte_type=8bit`, он будет действовать так, как будто `cte_type` имеет значение `7bit`.102103#### `raise_on_defect`104105Если [`True`](https://python-all.ru/3.5/library/constants.html#True), любые обнаруженные дефекты будут вызываться как ошибки. Если [`False`](https://python-all.ru/3.5/library/constants.html#False) (по умолчанию), дефекты будут передаваться методу [`register_defect()`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy.register_defect).106107#### `mangle_from_`108109Если [`True`](https://python-all.ru/3.5/library/constants.html#True), строки в теле, начинающиеся с *“From “*, экранируются добавлением `>` перед ними. Этот параметр используется, когда сообщение сериализуется генератором. По умолчанию: [`False`](https://python-all.ru/3.5/library/constants.html#False).110111Новое в версии 3.5: Параметр *mangle\_from\_*.112113Следующий метод [`Policy`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy) предназначен для вызова из кода, использующего библиотеку email, для создания экземпляров политики с пользовательскими настройками:114115#### `clone(**kw)`116117Возвращает новый экземпляр [`Policy`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy), атрибуты которого имеют те же значения, что и у текущего экземпляра, за исключением тех атрибутов, которым присвоены новые значения через именованные аргументы.118119Остальные методы [`Policy`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy) вызываются кодом пакета email и не предназначены для вызова из приложения, использующего пакет email. Пользовательская политика должна реализовывать все эти методы.120121#### `handle_defect(obj, defect)`122123Обрабатывает *дефект*, обнаруженный в *obj*. Когда пакет email вызывает этот метод, *defect* всегда будет подклассом `Defect`.124125Реализация по умолчанию проверяет флаг [`raise_on_defect`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy.raise_on_defect). Если он равен `True`, *defect* возбуждается как исключение. Если он равен `False` (по умолчанию), *obj* и *defect* передаются в [`register_defect()`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy.register_defect).126127#### `register_defect(obj, defect)`128129Регистрирует *дефект* для *obj*. В пакете email *defect* всегда будет подклассом `Defect`.130131Реализация по умолчанию вызывает метод `append` атрибута `defects` объекта *obj*. Когда пакет email вызывает [`handle_defect`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy.handle_defect), объект *obj* обычно имеет атрибут `defects`, который содержит метод `append`. Пользовательские типы объектов, используемые с пакетом email (например, пользовательские объекты `Message`), также должны предоставлять такой атрибут, иначе дефекты в разобранных сообщениях приведут к неожиданным ошибкам.132133#### `header_max_count(name)`134135Возвращает максимально допустимое количество заголовков с именем *name*.136137Вызывается, когда заголовок добавляется к объекту [`Message`](https://python-all.ru/3.5/library/email.message.html#email.message.Message). Если возвращаемое значение не равно `0` или `None`, и уже есть несколько заголовков с именем *name*, равным возвращённому значению, возбуждается исключение [`ValueError`](https://python-all.ru/3.5/library/exceptions.html#ValueError).138139Поскольку поведение по умолчанию `Message.__setitem__` заключается в добавлении значения в список заголовков, можно легко создать дубликаты заголовков, не замечая этого. Этот метод позволяет ограничить количество экземпляров определённых заголовков, которые могут быть добавлены в объект `Message` программно. (Ограничение не учитывается парсером, который честно воспроизведёт столько заголовков, сколько есть в разбираемом сообщении.)140141Реализация по умолчанию возвращает `None` для всех имён заголовков.142143#### `header_source_parse(sourcelines)`144145Пакет email вызывает этот метод со списком строк, каждая из которых заканчивается символами разделения строк, найденными в разбираемом источнике. Первая строка включает имя заголовка поля и разделитель. Все пробельные символы в источнике сохраняются. Метод должен возвращать кортеж `(name, value)`, который будет сохранён в `Message` для представления разобранного заголовка.146147Если реализация хочет сохранить совместимость с существующими политиками пакета email, *name* должно быть именем с сохранением регистра (все символы до разделителя ‘`:`’), а *value* – развёрнутым значением (все символы разделителей строк удалены, но пробелы сохранены), с удалёнными начальными пробельными символами.148149*sourcelines* может содержать двоичные данные, экранированные суррогатами.150151Реализация по умолчанию отсутствует152153#### `header_store_parse(name, value)`154155Пакет email вызывает этот метод с именем и значением, предоставленными прикладной программой, когда она программно изменяет объект `Message` (в отличие от `Message`, созданного парсером). Метод должен возвращать кортеж `(name, value)`, который будет сохранён в `Message` для представления заголовка.156157Если реализация хочет сохранить совместимость с существующими политиками пакета email, *name* и *value* должны быть строками или подклассами строк, которые не изменяют содержимое переданных аргументов.158159Реализация по умолчанию отсутствует160161#### `header_fetch_parse(name, value)`162163Пакет email вызывает этот метод с *именем* и *значением*, хранящимися в данный момент в `Message`, когда заголовок запрашивается прикладной программой, и то, что возвращает метод, передаётся обратно приложению в качестве значения запрашиваемого заголовка. Обратите внимание, что в `Message` может быть несколько заголовков с одним и тем же именем; методу передаются конкретные имя и значение заголовка, который будет возвращён приложению.164165*value* может содержать бинарные данные с суррогатным экранированием. В возвращаемом методом значении не должно быть таких бинарных данных.166167Реализация по умолчанию отсутствует168169#### `fold(name, value)`170171Пакет email вызывает этот метод с *именем* и *значением*, хранящимися в данный момент в `Message` для заданного заголовка. Метод должен вернуть строку, которая представляет этот заголовок, «сложенный» (folded) правильно (в соответствии с настройками политики) путём составления *имени* с *значением* и вставки символов [`linesep`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy.linesep) в нужных местах. См. [**RFC 5322**](https://python-all.ru/3.5/library/email.policy.html) для обсуждения правил сворачивания заголовков электронной почты.172173*value* может содержать бинарные данные с суррогатным экранированием. В возвращаемой методом строке не должно быть таких бинарных данных.174175#### `fold_binary(name, value)`176177То же, что и [`fold()`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy.fold), за исключением того, что возвращаемое значение должно быть объектом bytes, а не строкой.178179*value* может содержать бинарные данные с суррогатным экранированием. Они могут быть преобразованы обратно в бинарные данные в возвращаемом байтовом объекте.180181#### `class email.policy.Compat32(**kw)`182183Этот конкретный [`Policy`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy) является политикой обратной совместимости. Он воспроизводит поведение пакета email в Python 3.2. Модуль [`policy`](https://python-all.ru/3.5/library/email.policy.html#module-email.policy) также определяет экземпляр этого класса, [`compat32`](https://python-all.ru/3.5/library/email.policy.html#email.policy.compat32), который используется в качестве политики по умолчанию. Таким образом, поведение пакета email по умолчанию – сохранять совместимость с Python 3.2.184185Следующие атрибуты имеют значения, отличные от значения по умолчанию [`Policy`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy):186187#### `mangle_from_`188189Значение по умолчанию: `True`.190191Класс предоставляет следующие конкретные реализации абстрактных методов [`Policy`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy):192193#### `header_source_parse(sourcelines)`194195Имя разбирается как всё до символа '`:`' и возвращается без изменений. Значение определяется путём удаления ведущих пробелов из остатка первой строки, объединения всех последующих строк вместе и удаления любых завершающих символов возврата каретки или перевода строки.196197#### `header_store_parse(name, value)`198199Имя и значение возвращаются без изменений.200201#### `header_fetch_parse(name, value)`202203Если значение содержит двоичные данные, оно преобразуется в объект [`Header`](https://python-all.ru/3.5/library/email.header.html#email.header.Header) с использованием кодировки `unknown-8bit`. В противном случае оно возвращается без изменений.204205#### `fold(name, value)`206207Заголовки сворачиваются с помощью алгоритма свёртки [`Header`](https://python-all.ru/3.5/library/email.header.html#email.header.Header), который сохраняет существующие переносы строк в значении и оборачивает каждую результирующую строку до `max_line_length`. Не-ASCII двоичные данные кодируются с помощью CTE с использованием кодировки `unknown-8bit`.208209#### `fold_binary(name, value)`210211Заголовки сворачиваются с помощью алгоритма свёртки [`Header`](https://python-all.ru/3.5/library/email.header.html#email.header.Header), который сохраняет существующие переносы строк в значении и оборачивает каждую результирующую строку до `max_line_length`. Если `cte_type` равно `7bit`, не-ASCII двоичные данные кодируются с помощью CTE с использованием кодировки `unknown-8bit`. В противном случае используется исходный заголовок с его существующими переносами строк и любыми (не соответствующими RFC) двоичными данными, которые он может содержать.212213Экземпляр [`Compat32`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Compat32) предоставляется как константа модуля:214215#### `email.policy.compat32`216217Экземпляр [`Compat32`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Compat32), обеспечивающий обратную совместимость с поведением пакета email в Python 3.2.218219> **Примечание**220>221> The documentation below describes new policies that are included in the standard library on a [provisional basis](https://python-all.ru/3.5/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.222223#### `class email.policy.EmailPolicy(**kw)`224225Этот конкретный [`Policy`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy) обеспечивает поведение, которое должно полностью соответствовать текущим RFC электронной почты. Они включают (но не ограничиваются) [**RFC 5322**](https://python-all.ru/3.5/library/email.policy.html), [**RFC 2047**](https://python-all.ru/3.5/library/email.policy.html) и текущим RFC MIME.226227Эта политика добавляет новые алгоритмы разбора и сворачивания заголовков. Вместо простых строк заголовки являются `str` подклассами с атрибутами, которые зависят от типа поля. Алгоритмы разбора и сворачивания полностью реализуют [**RFC 2047**](https://python-all.ru/3.5/library/email.policy.html) и [**RFC 5322**](https://python-all.ru/3.5/library/email.policy.html).228229В дополнение к настраиваемым атрибутам, перечисленным выше и относящимся ко всем политикам, эта политика добавляет следующие дополнительные атрибуты:230231#### `utf8`232233If `False`, follow [**RFC 5322**](https://python-all.ru/3.5/library/email.policy.html), supporting non-ASCII characters in headers by encoding them as “encoded words”. If `True`, follow [**RFC 6532**](https://python-all.ru/3.5/library/email.policy.html) and use `utf-8` encoding for headers. Messages formatted in this way may be passed to SMTP servers that support the `SMTPUTF8` extension ([**RFC 6531**](https://python-all.ru/3.5/library/email.policy.html)).234235#### `refold_source`236237Если значение заголовка в объекте `Message` получено из [`parser`](https://python-all.ru/3.5/library/email.parser.html#module-email.parser) (а не установлено программой), этот атрибут указывает, должен ли генератор переформатировать это значение при преобразовании сообщения обратно в потоковую форму. Возможные значения:238239| `none` | все исходные значения используют исходное сворачивание |240| --- | --- |241| `long` | исходные значения, имеющие строки длиннее `max_line_length`, будут свёрнуты заново |242| `all` | все значения сворачиваются заново. |243244Значение по умолчанию: `long`.245246#### `header_factory`247248A callable that takes two arguments, `name` and `value`, where `name` is a header field name and `value` is an unfolded header field value, and returns a string subclass that represents that header. A default `header_factory` (see [`headerregistry`](https://python-all.ru/3.5/library/email.headerregistry.html#module-email.headerregistry)) is provided that understands some of the [**RFC 5322**](https://python-all.ru/3.5/library/email.policy.html) header field types. (Currently address fields and date fields have special treatment, while all other fields are treated as unstructured. This list will be completed before the extension is marked stable.)249250#### `content_manager`251252Объект как минимум с двумя методами: get\_content и set\_content. Когда вызывается метод `get_content()` или `set_content()` объекта [`Message`](https://python-all.ru/3.5/library/email.message.html#email.message.Message), он вызывает соответствующий метод этого объекта, передавая ему объект сообщения в качестве первого аргумента, а также любые аргументы или ключевые слова, переданные ему как дополнительные аргументы. По умолчанию `content_manager` установлен в [`raw_data_manager`](https://python-all.ru/3.5/library/email.contentmanager.html#email.contentmanager.raw_data_manager).253254Новое в версии 3.4.255256Класс предоставляет следующие конкретные реализации абстрактных методов [`Policy`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy):257258#### `header_max_count(name)`259260Возвращает значение атрибута [`max_count`](https://python-all.ru/3.5/library/email.headerregistry.html#email.headerregistry.BaseHeader.max_count) специализированного класса, используемого для представления заголовка с данным именем.261262#### `header_source_parse(sourcelines)`263264Реализация этого метода такая же, как и для [`Compat32`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Compat32) политики.265266#### `header_store_parse(name, value)`267268Имя возвращается без изменений. Если входное значение имеет атрибут `name` и он совпадает с *именем* без учёта регистра, значение возвращается без изменений. В противном случае *имя* и *значение* передаются в `header_factory`, и возвращается полученный объект заголовка в качестве значения. В этом случае возбуждается `ValueError`, если входное значение содержит символы CR или LF.269270#### `header_fetch_parse(name, value)`271272Если значение имеет атрибут `name`, оно возвращается без изменений. В противном случае *имя* и *значение* с удалёнными символами CR или LF передаются в `header_factory`, и возвращается полученный объект заголовка. Любые байты с суррогатным экранированием превращаются в глиф неизвестного символа Unicode.273274#### `fold(name, value)`275276Свёртка заголовков управляется настройкой политики [`refold_source`](https://python-all.ru/3.5/library/email.policy.html#email.policy.EmailPolicy.refold_source). Значение считается «исходным значением» тогда и только тогда, когда у него нет атрибута `name` (наличие атрибута `name` означает, что это объект заголовка того или иного вида). Если исходное значение необходимо пересвернуть в соответствии с политикой, оно преобразуется в объект заголовка путём передачи *имени* и *значения* (с удалёнными символами CR и LF) в `header_factory`. Свёртка объекта заголовка выполняется вызовом его метода `fold` с текущей политикой.277278Исходные значения разбиваются на строки с помощью [`splitlines()`](https://python-all.ru/3.5/library/stdtypes.html#str.splitlines). Если значение не требуется пересвёртывать, строки объединяются обратно с использованием `linesep` из политики и возвращаются. Исключение составляют строки, содержащие не-ASCII двоичные данные. В этом случае значение пересвёртывается независимо от настройки `refold_source`, что приводит к кодированию двоичных данных с помощью CTE с использованием кодировки `unknown-8bit`.279280#### `fold_binary(name, value)`281282То же, что и [`fold()`](https://python-all.ru/3.5/library/email.policy.html#email.policy.EmailPolicy.fold), если [`cte_type`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy.cte_type) равно `7bit`, за исключением того, что возвращаемое значение – байты.283284Если [`cte_type`](https://python-all.ru/3.5/library/email.policy.html#email.policy.Policy.cte_type) равно `8bit`, не-ASCII двоичные данные преобразуются обратно в байты. Заголовки с двоичными данными не пересвёртываются независимо от настройки `refold_header`, так как невозможно определить, состоят ли двоичные данные из однобайтовых или многобайтовых символов.285286Следующие экземпляры [`EmailPolicy`](https://python-all.ru/3.5/library/email.policy.html#email.policy.EmailPolicy) предоставляют значения по умолчанию, подходящие для конкретных прикладных областей. Обратите внимание, что в будущем поведение этих экземпляров (в частности экземпляра `HTTP`) может быть скорректировано для ещё более точного соответствия RFC, относящимся к их областям.287288#### `email.policy.default`289290Экземпляр `EmailPolicy` со всеми значениями по умолчанию без изменений. Эта политика использует стандартные для Python окончания строк `\n` вместо правильных по RFC `\r\n`.291292#### `email.policy.SMTP`293294Подходит для сериализации сообщений в соответствии с RFC электронной почты. Как `default`, но с `linesep`, установленным в `\r\n`, что соответствует RFC.295296#### `email.policy.SMTPUTF8`297298То же, что и `SMTP`, за исключением того, что [`utf8`](https://python-all.ru/3.5/library/email.policy.html#email.policy.EmailPolicy.utf8) равно `True`. Полезно для сериализации сообщений в хранилище без использования закодированных слов в заголовках. Следует использовать только для передачи по SMTP, если адреса отправителя или получателя содержат символы, не входящие в ASCII (метод [`smtplib.SMTP.send_message()`](https://python-all.ru/3.5/library/smtplib.html#smtplib.SMTP.send_message) обрабатывает это автоматически).299300#### `email.policy.HTTP`301302Подходит для сериализации заголовков для использования в HTTP-трафике. Как `SMTP`, за исключением того, что `max_line_length` установлено в `None` (неограниченно).303304#### `email.policy.strict`305306Удобный экземпляр. То же, что и `default`, за исключением того, что `raise_on_defect` установлено в `True`. Это позволяет сделать любую политику строгой, написав:307308```python309somepolicy + policy.strict310```311312Со всеми этими [`EmailPolicies`](https://python-all.ru/3.5/library/email.policy.html#email.policy.EmailPolicy) действующий API пакета email изменяется по сравнению с API Python 3.2 следующим образом:313314> - Установка заголовка в [`Message`](https://python-all.ru/3.5/library/email.message.html#email.message.Message) приводит к разбору этого заголовка и созданию объекта заголовка.315> - Получение значения заголовка из [`Message`](https://python-all.ru/3.5/library/email.message.html#email.message.Message) приводит к разбору этого заголовка и созданию объекта заголовка, который затем возвращается.316> - Любой объект заголовка или любой заголовок, который пересвёртывается в соответствии с настройками политики, свёртывается с использованием алгоритма, полностью реализующего алгоритмы свёртки RFC, включая знание того, где требуются и разрешены закодированные слова.317318С точки зрения приложения это означает, что любой заголовок, полученный через [`Message`](https://python-all.ru/3.5/library/email.message.html#email.message.Message), является объектом заголовка с дополнительными атрибутами, строковое значение которого – полностью декодированное значение заголовка в Unicode. Аналогично, заголовку может быть присвоено новое значение или создан новый заголовок с использованием строки Unicode, и политика позаботится о преобразовании строки Unicode в правильную закодированную форму RFC.319320Объекты заголовков и их атрибуты описаны в [`headerregistry`](https://python-all.ru/3.5/library/email.headerregistry.html#module-email.headerregistry).321