email.message.Message: Представление электронного сообщения с помощью API compat32
Класс Message очень похож на класс EmailMessage, без методов, добавленных этим классом, и с немного отличающимся поведением по умолчанию некоторых других методов. Мы также документируем здесь некоторые методы, которые, хотя и поддерживаются классом EmailMessage, не рекомендуются, если вы не работаете с устаревшим кодом.
В остальном философия и структура двух классов одинаковы.
В этом документе описывается поведение по умолчанию (для Message) политики Compat32. Если вы собираетесь использовать другую политику, вам следует использовать класс EmailMessage вместо этого.
Электронное сообщение состоит из заголовков и тела. Заголовки должны иметь имена и значения в стиле RFC 5322, где имя и значение поля разделены двоеточием. Двоеточие не является частью ни имени, ни значения поля. Тело может быть простым текстовым сообщением, двоичным объектом или структурированной последовательностью подсообщений, каждое со своим набором заголовков и своим телом. Последний тип тела указывается тем, что у сообщения есть MIME-тип, такой как multipart/* или message/rfc822.
Концептуальная модель, предоставляемая объектом Message, представляет собой упорядоченный словарь заголовков с дополнительными методами для доступа к специализированной информации из заголовков, для доступа к телу, для генерации сериализованной версии сообщения и для рекурсивного обхода дерева объектов. Обратите внимание, что дублирование заголовков поддерживается, но для доступа к ним необходимо использовать специальные методы.
Псевдословарь Message индексируется по именам заголовков, которые должны быть значениями ASCII. Значения словаря — это строки, которые, как предполагается, содержат только символы ASCII; для не-ASCII входных данных существует специальная обработка, но она не всегда приводит к корректным результатам. Заголовки хранятся и возвращаются в форме с сохранением регистра, но имена полей сравниваются без учета регистра. Также может быть один заголовок конверта, также известный как заголовок Unix-From или заголовок From_. Тело — это строка или байты в случае простых объектов сообщения или список объектов Message для документов-контейнеров MIME (например, multipart/* и message/rfc822).
Вот методы класса Message:
-
class email.message.Message(policy=compat32) -
Если указан параметр policy (он должен быть экземпляром класса
policy), используйте правила, которые он задаёт, для обновления и сериализации представления сообщения. Если policy не задан, используйте политикуcompat32, которая поддерживает обратную совместимость с версией пакета email Python 3.2. Более подробную информацию см. в документацииpolicy.Изменено в версии 3.3: Добавлен ключевой аргумент policy.
-
as_string(unixfrom=False, maxheaderlen=0, policy=None) -
Возвращает всё сообщение, сглаженное в строку. Когда необязательный параметр unixfrom имеет значение True, заголовок конверта включается в возвращаемую строку. Значение по умолчанию для unixfrom равно
False. По причинам обратной совместимости, maxheaderlen по умолчанию равен0, поэтому, если вам нужно другое значение, вы должны явно его переопределить (значение, указанное для max_line_length в политике, этим методом игнорируется). Аргумент policy может быть использован для переопределения политики по умолчанию, полученной из экземпляра сообщения. Это может использоваться для управления некоторыми форматами, генерируемыми методом, так как указанная policy будет передана вGenerator.Сглаживание сообщения может привести к изменениям в
Message, если необходимо заполнить значения по умолчанию для завершения преобразования в строку (например, могут быть сгенерированы или изменены MIME границы).Обратите внимание, что этот метод предоставляется в качестве удобства и может не всегда форматировать сообщение так, как вам нужно. Например, по умолчанию он не выполняет преобразование строк, начинающихся с
From, необходимого для формата Unix mbox. Для большей гибкости создайте экземплярGeneratorи используйте его методflatten()напрямую. Например:from io import StringIO from email.generator import Generator fp = StringIO() g = Generator(fp, mangle_from_=True, maxheaderlen=60) g.flatten(msg) text = fp.getvalue()
Если объект сообщения содержит двоичные данные, которые не закодированы в соответствии со стандартами RFC, некорректные данные будут заменены кодовыми точками Unicode «неизвестный символ». (См. также
as_bytes()иBytesGenerator.)Изменено в версии 3.4: добавлена ключевая аргумент policy.
-
__str__() -
Эквивалентно
as_string(). Позволяетstr(msg)генерировать строку, содержащую отформатированное сообщение.
-
as_bytes(unixfrom=False, policy=None) -
Возвращает всё сообщение, сглаженное в виде объекта байтов. Когда необязательный параметр unixfrom имеет значение True, заголовок конверта включается в возвращаемую строку. Значение по умолчанию для unixfrom равно
False. Аргумент policy может быть использован для переопределения политики по умолчанию, полученной из экземпляра сообщения. Это может использоваться для управления некоторыми форматами, генерируемыми методом, так как указанная policy будет передана вBytesGenerator.Сглаживание сообщения может привести к изменениям в
Message, если необходимо заполнить значения по умолчанию для завершения преобразования в строку (например, могут быть сгенерированы или изменены MIME границы).Обратите внимание, что этот метод предоставляется в качестве удобства и может не всегда форматировать сообщение так, как вам нужно. Например, по умолчанию он не выполняет преобразование строк, начинающихся с
From, необходимого для формата Unix mbox. Для большей гибкости создайте экземплярBytesGeneratorи используйте его методflatten()напрямую. Например:from io import BytesIO from email.generator import BytesGenerator fp = BytesIO() g = BytesGenerator(fp, mangle_from_=True, maxheaderlen=60) g.flatten(msg) text = fp.getvalue()
Добавлен в версии 3.4.
-
__bytes__() -
Эквивалентно
as_bytes(). Позволяетbytes(msg)генерировать объект байтов, содержащий отформатированное сообщение.Добавлен в версии 3.4.
-
is_multipart() -
Возвращает
Trueесли содержимое сообщения представляет собой список под-объектовMessage, в противном случае возвращаетFalse. Когдаis_multipart()возвращаетFalse, содержимое должно быть строковым объектом (который может быть двоичным содержимым, закодированным CTE). (Обратите внимание, чтоis_multipart()возвращающийTrueне обязательно означает, что «msg.get_content_maintype() == ‘multipart’» вернётTrue. Например,is_multipartвернётTrueкогдаMessageимеет типmessage/rfc822.)
-
set_unixfrom(unixfrom) -
Устанавливает заголовок конверта сообщения на unixfrom, который должен быть строкой.
-
get_unixfrom() -
Возвращает заголовок конверта сообщения. По умолчанию возвращает
None, если заголовок конверта никогда не устанавливался.
-
attach(payload) -
Добавляет указанное payload к текущему содержимому, которое до вызова должно быть
Noneили списком объектовMessage. После вызова содержимое всегда будет списком объектовMessage. Если вы хотите установить содержимое на скалярный объект (например, строку), используйтеset_payload()вместо этого.Это устаревший метод. В классе
EmailMessageего функциональность заменена наset_content()и связанные с ним методыmakeиadd.
-
-
get_payload(i=None, decode=False) -
Возвращает текущую полезную нагрузку, которая будет списком объектов
Message, когдаis_multipart()имеет значениеTrue, или строкой, когдаis_multipart()имеет значениеFalse. Если полезная нагрузка является списком, и вы изменяете объект списка, вы изменяете полезную нагрузку сообщения на месте.С необязательным аргументом i,
get_payload()вернёт i-й элемент полезной нагрузки, считая с нуля, еслиis_multipart()имеет значениеTrue. Будет поднято исключениеIndexError, если i меньше 0 или больше или равно количеству элементов в полезной нагрузке. Если полезная нагрузка является строкой (т.е.is_multipart()имеет значениеFalse) и указан i, поднимается исключениеTypeError.Необязательный decode — флаг, указывающий, следует ли декодировать полезную нагрузку или нет, в соответствии с заголовком Content-Transfer-Encoding. Когда
Trueи сообщение не является составным, полезная нагрузка будет декодирована, если значение этого заголовка равноquoted-printableилиbase64. Если используется другой код кодирования или заголовок Content-Transfer-Encoding отсутствует, полезная нагрузка возвращается как есть (не декодированная). Во всех случаях возвращаемое значение — двоичные данные. Если сообщение является составным и флаг decode равенTrue, то возвращаетсяNone. Если полезная нагрузка закодирована в base64 и не была идеально сформирована (отсутствует заполнение, символы за пределами алфавита base64), соответствующий дефект будет добавлен к свойству defects сообщения (InvalidBase64PaddingDefectилиInvalidBase64CharactersDefectсоответственно).Когда decode имеет значение
False(по умолчанию), тело возвращается как строка без декодирования Content-Transfer-Encoding. Однако, для Content-Transfer-Encoding 8bit, делается попытка декодировать исходные байты, используяcharset, указанное в заголовке Content-Type, с обработчиком ошибокreplace. Еслиcharsetне указано или указанноеcharsetне распознаётся пакетом email, тело декодируется с помощью кодировки по умолчанию ASCII.Это устаревший метод. В классе
EmailMessageего функциональность заменена наget_content()иiter_parts().
-
set_payload(payload, charset=None) -
Устанавливает всю полезную нагрузку объекта сообщения на payload. Клиент несёт ответственность за соблюдение инвариантов полезной нагрузки. Необязательный charset задаёт кодировку по умолчанию сообщения; подробности см. в
set_charset().Это устаревший метод. В классе
EmailMessageего функциональность заменена наset_content().
-
set_charset(charset) -
Устанавливает кодировку символов полезной нагрузки на charset, который может быть экземпляром
Charset(см.email.charset), строкой, обозначающей кодировку символов, илиNone. Если это строка, она будет преобразована в экземплярCharset. Если charset равенNone, параметрcharsetбудет удалён из заголовка Content-Type (сообщение не будет изменено иначе). Любое другое значение приведёт к исключениюTypeError.Если заголовок MIME-Version отсутствует, он будет добавлен. Если заголовок Content-Type отсутствует, он будет добавлен со значением text/plain. Существует ли заголовок Content-Type или нет, его параметр
charsetбудет установлен на charset.output_charset. Если charset.input_charset и charset.output_charset различаются, полезная нагрузка будет закодирована заново в output_charset. Если заголовок Content-Transfer-Encoding отсутствует, то полезная нагрузка будет закодирована, если необходимо, с использованием указанногоCharset, и будет добавлен соответствующий заголовок. Если заголовок Content-Transfer-Encoding уже существует, предполагается, что полезная нагрузка уже правильно закодирована с использованием этого Content-Transfer-Encoding и не будет изменена.Это устаревший метод. В классе
EmailMessageего функциональность заменена параметром charset методаemail.emailmessage.EmailMessage.set_content().
-
get_charset() -
Возвращает экземпляр
Charset, связанный с полезной нагрузкой сообщения.Это устаревший метод. В классе
EmailMessageон всегда возвращаетNone.
Следующие методы реализуют интерфейс отображения для доступа к заголовкам RFC 2822 сообщения. Обратите внимание, что между этими методами и обычным интерфейсом отображения (т.е. словарем) есть некоторые семантические различия. Например, в словаре нет дублирующих ключей, но здесь могут быть дублирующиеся заголовки сообщения. Кроме того, в словарях нет гарантированного порядка ключей, возвращаемых
keys(), но в объектеMessageзаголовки всегда возвращаются в том порядке, в котором они появились в исходном сообщении или были добавлены в сообщение позже. Любой заголовок, удалённый и затем повторно добавленный, всегда добавляется в конец списка заголовков.Эти семантические различия являются намеренными и предвзяты в сторону максимального удобства.
Обратите внимание, что во всех случаях любой заголовок конверта, присутствующий в сообщении, не включается в интерфейс отображения.
В модели, сгенерированной из байтов, любые значения заголовков, которые (вопреки RFC) содержат не-ASCII байты, будут, при получении через этот интерфейс, представлены как объекты
Headerс кодировкойunknown-8bit.-
__len__() -
Возвращает общее количество заголовков, включая дубликаты.
-
__contains__(name) -
Возвращает
True, если объект сообщения имеет поле с именем name. Сопоставление выполняется без учёта регистра, и name не должно включать в себя заключительный двоеточие. Используется для оператораin, например:if 'message-id' in myMessage: print('Message-ID:', myMessage['message-id'])
-
__getitem__(name) -
Возвращает значение поля заголовка с указанным именем. name не должно включать двоеточие. Если заголовок отсутствует, возвращается
None; исключениеKeyErrorникогда не поднимается.Обратите внимание, что если указанное поле появляется более одного раза в заголовках сообщения, то какое именно из этих значений поля будет возвращено, не определено. Используйте метод
get_all()для получения значений всех существующих заголовков с указанным именем.
-
__setitem__(name, val) -
Добавляет заголовок в сообщение с именем поля name и значением val. Поле добавляется в конец существующих полей сообщения.
Обратите внимание, что это не перезаписывает или удаляет любой существующий заголовок с тем же именем. Если вы хотите убедиться, что новый заголовок является единственным присутствующим в сообщении с именем поля name, удалите поле сначала, например:
del msg['subject'] msg['subject'] = 'Python roolz!'
-
__delitem__(name) -
Удаляет все вхождения поля с именем name из заголовков сообщения. Если указанного поля нет в заголовках, исключение не поднимается.
-
keys() -
Возвращает список всех имён полей заголовков сообщения.
-
values() -
Возвращает список всех значений полей сообщения.
-
-
items() -
Возвращает список пар кортежей, содержащих все заголовки и значения полей сообщения.
-
get(name, failobj=None) -
Возвращает значение поля с заданным именем. Это идентично
__getitem__(), за исключением того, что необязательный failobj возвращается, если заданного заголовка нет (по умолчаниюNone).
Вот некоторые дополнительные полезные методы:
-
get_all(name, failobj=None) -
Возвращает список всех значений для поля с именем name. Если в сообщении нет заголовков с указанным именем, возвращается failobj (по умолчанию
None).
-
add_header(_name, _value, **_params) -
Расширенная настройка заголовка. Этот метод аналогичен
__setitem__(), за исключением того, что дополнительные параметры заголовка могут быть указаны в качестве ключевых аргументов. _name — добавляемое поле заголовка, а _value — основное значение заголовка.Для каждого элемента в словаре ключевых аргументов _params ключ используется в качестве имени параметра, при этом подчеркивания преобразуются в дефисы (поскольку дефисы запрещены в идентификаторах Python). Обычно параметр будет добавлен как
key="value", если значение неNone, в этом случае добавляется только ключ. Если значение содержит не-ASCII символы, оно может быть указано как тройка кортежей в формате(CHARSET, LANGUAGE, VALUE), гдеCHARSET— строка, обозначающая кодировку, которая будет использоваться для кодирования значения,LANGUAGEобычно может быть установлено вNoneили пустую строку (см. RFC 2231 для других возможностей), аVALUE— строка, содержащая не-ASCII символы. Если тройка кортежей не передается и значение содержит не-ASCII символы, оно автоматически кодируется в формате RFC 2231 с использованиемCHARSETutf-8иLANGUAGENone.Вот пример:
msg.add_header('Content-Disposition', 'attachment', filename='bud.gif')Это добавит заголовок, который выглядит как
Content-Disposition: attachment; filename="bud.gif"
Пример с не-ASCII символами:
msg.add_header('Content-Disposition', 'attachment', filename=('iso-8859-1', '', 'Fußballer.ppt'))Что приводит к
Content-Disposition: attachment; filename*="iso-8859-1''Fu%DFballer.ppt"
-
replace_header(_name, _value) -
Заменяет заголовок. Заменяет первый заголовок в сообщении, соответствующий _name, сохраняя порядок заголовков и регистр имени поля. Если соответствующий заголовок не найден, возникает
KeyError.
-
get_content_type() -
Возвращает тип содержимого сообщения. Возвращаемая строка приводится к нижнему регистру в формате maintype/subtype. Если в сообщении не было заголовка Content-Type, возвращается тип по умолчанию, заданный
get_default_type(). Поскольку согласно RFC 2045, сообщения всегда имеют тип по умолчанию,get_content_type()всегда возвращает значение.RFC 2045 определяет тип сообщения по умолчанию как text/plain, если оно не находится внутри контейнера multipart/digest, в этом случае это будет message/rfc822. Если заголовок Content-Type имеет некорректную спецификацию типа, RFC 2045 предписывает, что типом по умолчанию должен быть text/plain.
-
get_content_maintype() -
Возвращает основное содержимое типа сообщения. Это часть maintype строки, возвращаемой
get_content_type().
-
get_content_subtype() -
Возвращает подтип содержимого сообщения. Это часть subtype строки, возвращаемой
get_content_type().
-
get_default_type() -
Возвращает тип содержимого по умолчанию. Большинство сообщений имеют тип содержимого по умолчанию text/plain, за исключением сообщений, которые являются подчастями контейнеров multipart/digest. Такие подчасти имеют тип содержимого по умолчанию message/rfc822.
-
set_default_type(ctype) -
Устанавливает тип содержимого по умолчанию. ctype должен быть либо text/plain, либо message/rfc822, хотя это не проверяется. Тип содержимого по умолчанию не хранится в заголовке Content-Type.
-
get_params(failobj=None, header='content-type', unquote=True) -
Возвращает параметры сообщения Content-Type в виде списка. Элементы возвращаемого списка являются парами ключ/значение, разделенными знаком
'='. Левая часть'='— ключ, правая — значение. Если в параметре нет знака'=', значение пустая строка, в противном случае значение, как описано вget_param(), и не заключено в кавычки, если необязательный unquote равенTrue(по умолчанию).Необязательный failobj — объект, который возвращается, если заголовок Content-Type отсутствует. Необязательный header — заголовок для поиска вместо Content-Type.
Это устаревший метод. На
EmailMessageклассе его функциональность заменена свойством params отдельных объектов заголовка, возвращаемых методами доступа к заголовкам.
-
get_param(param, failobj=None, header='content-type', unquote=True) -
Возвращает значение параметра заголовка Content-Type param в виде строки. Если у сообщения нет заголовка Content-Type или такого параметра нет, возвращается failobj (по умолчанию
None).Необязательный header, если указан, определяет заголовок сообщения для использования вместо Content-Type.
Ключи параметров всегда сравниваются без учета регистра. Возвращаемое значение может быть либо строкой, либо тройкой кортежей, если параметр был закодирован в формате RFC 2231. Когда это тройка кортежей, элементы значения имеют вид
(CHARSET, LANGUAGE, VALUE). Обратите внимание, что какCHARSET, так иLANGUAGEмогут бытьNone, в этом случаеVALUEследует считать закодированным в кодировкеus-ascii. Вы обычно можете игнорироватьLANGUAGE.Если ваше приложение не заботится о том, был ли параметр закодирован в формате RFC 2231, вы можете сжать значение параметра, вызвав
email.utils.collapse_rfc2231_value(), передав значение, возвращаемоеget_param(). Это вернёт соответствующе декодированную строку Unicode, когда значение является кортежем, или исходную строку без кавычек, если это не так. Например:rawparam = msg.get_param('foo') param = email.utils.collapse_rfc2231_value(rawparam)В любом случае, значение параметра (либо возвращаемая строка, либо элемент
VALUEв тройке кортежей) всегда без кавычек, если unquote не установлено вFalse.Это устаревший метод. На
EmailMessageклассе его функциональность заменена свойством params отдельных объектов заголовка, возвращаемых методами доступа к заголовкам.
-
-
set_param(param, value, header='Content-Type', requote=True, charset=None, language='', replace=False) -
Установите параметр в заголовке Content-Type. Если параметр уже существует в заголовке, его значение будет заменено на value. Если заголовок Content-Type ещё не определён для этого сообщения, он будет установлен в text/plain, а новое значение параметра будет добавлено в соответствии с RFC 2045.
Необязательный параметр header указывает альтернативный заголовок вместо Content-Type, и все параметры будут приведены к кавычкам, если это необходимо, кроме случаев, когда необязательный параметр requote
False(по умолчаниюTrue).Если указан необязательный параметр charset, параметр будет закодирован в соответствии с RFC 2231. Необязательный параметр language указывает язык RFC 2231, по умолчанию пустая строка. charset и language должны быть строками.
Если replace
False(по умолчанию), заголовок перемещается в конец списка заголовков. Если replaceTrue, заголовок будет обновлён на месте.Изменено в версии 3.4: ключевое слово
replaceбыло добавлено.
-
del_param(param, header='content-type', requote=True) -
Полностью удалите заданный параметр из заголовка Content-Type. Заголовок будет перезаписан на месте без параметра или его значения. Все значения будут приведены к кавычкам по необходимости, если requote не
False(по умолчаниюTrue). Необязательный параметр header указывает альтернативу Content-Type.
-
set_type(type, header='Content-Type', requote=True) -
Установите основной тип и подтип для заголовка Content-Type. type должен быть строкой в формате maintype/subtype, в противном случае генерируется
ValueError.Этот метод заменяет заголовок Content-Type, сохраняя все параметры на месте. Если requote
False, это оставляет цитирование существующего заголовка таким, как есть, в противном случае параметры будут цитироваться (по умолчанию).Альтернативный заголовок может быть указан в аргументе header. Когда устанавливается заголовок Content-Type, также добавляется заголовок MIME-Version.
Это устаревший метод. На классе
EmailMessageего функциональность заменена методамиmake_иadd_.
-
get_filename(failobj=None) -
Возвращает значение параметра
filenameзаголовка Content-Disposition сообщения. Если заголовок не содержит параметраfilename, этот метод возвращает значение параметраnameзаголовка Content-Type. Если ни один из них не найден или заголовок отсутствует, возвращается failobj. Возвращаемая строка всегда будет без кавычек в соответствии сemail.utils.unquote().
-
get_boundary(failobj=None) -
Возвращает значение параметра
boundaryзаголовка Content-Type сообщения или failobj, если заголовок отсутствует или не содержит параметраboundary. Возвращаемая строка всегда будет без кавычек в соответствии сemail.utils.unquote().
-
set_boundary(boundary) -
Устанавливает параметр
boundaryзаголовка Content-Type в значение boundary.set_boundary()всегда приводит boundary к кавычкам по необходимости. Если у объекта сообщения нет заголовка Content-Type, возникает ошибкаHeaderParseError.Обратите внимание, что использование этого метода отличается от удаления старого заголовка Content-Type и добавления нового с новым параметром boundary с помощью
add_header(), так какset_boundary()сохраняет порядок заголовка Content-Type в списке заголовков. Однако он не сохраняет никакие продолжения строк, которые могут быть в оригинальном заголовке Content-Type.
-
get_content_charset(failobj=None) -
Возвращает параметр
charsetзаголовка Content-Type, приведённый к нижнему регистру. Если заголовка Content-Type нет или этот заголовок не содержит параметраcharset, возвращается failobj.Обратите внимание, что этот метод отличается от
get_charset(), который возвращает экземплярCharsetдля кодировки по умолчанию тела сообщения.
-
get_charsets(failobj=None) -
Возвращает список, содержащий имена наборов символов в сообщении. Если сообщение является multipart, то список будет содержать один элемент для каждого подкомпонента в полезной нагрузке, в противном случае он будет списком длиной 1.
Каждый элемент в списке будет строкой, являющейся значением параметра
charsetв заголовке Content-Type для представленного подкомпонента. Однако, если у подкомпонента нет заголовка Content-Type, параметраcharset, или он не является подкомпонентом типа MIME text, то этот элемент в возвращаемом списке будет failobj.
-
get_content_disposition() -
Возвращает значение заголовка сообщения Content-Disposition в нижнем регистре (без параметров), если он есть, или
None. Возможные значения для этого метода — inline, attachment илиNone, если сообщение соответствует RFC 2183.Добавлен в версии 3.5.
-
walk() -
Метод
walk()— универсальный генератор, который может использоваться для итерации по всем частям и подчастям дерева объекта сообщения в порядке обхода в глубину. Обычно вы используетеwalk()в качестве итератора в циклеfor; каждая итерация возвращает следующий подкомпонент.Вот пример, который выводит тип MIME каждой части структуры multipart сообщения:
>>> for part in msg.walk(): ... print(part.get_content_type()) multipart/report text/plain message/delivery-status text/plain text/plain message/rfc822 text/plain
walkперебирает подкомпоненты любой части, гдеis_multipart()возвращаетTrue, даже еслиmsg.get_content_maintype() == 'multipart'может возвращатьFalse. Мы можем видеть это в нашем примере, используя вспомогательную функцию отладки_structure.>>> for part in msg.walk(): ... print(part.get_content_maintype() == 'multipart', ... part.is_multipart()) True True False False False True False False False False False True False False >>> _structure(msg) multipart/report text/plain message/delivery-status text/plain text/plain message/rfc822 text/plainЗдесь части
messageне являютсяmultiparts, но они содержат подчасти.is_multipart()возвращаетTrueиwalkспускается в подчасти.
Messageобъекты также могут по желанию содержать два атрибута экземпляра, которые могут быть использованы при генерации простого текста MIME-сообщения.-
-
preamble -
Формат MIME-документа позволяет включать некоторый текст между пустой строкой после заголовков и первой строкой границы раздела. Обычно этот текст не отображается в почтовом клиенте, понимающем MIME, так как он находится вне стандартного MIME-формата. Однако при просмотре исходного текста сообщения или при просмотре сообщения в почтовом клиенте, не понимающем MIME, этот текст может стать видимым.
Атрибут preamble содержит этот дополнительный текст вне MIME-формата для MIME-документов. Когда
Parserобнаруживает текст после заголовков, но перед первой строкой границы, он присваивает этот текст атрибуту preamble сообщения. КогдаGeneratorгенерирует обычный текстовый формат MIME-сообщения и находит атрибут preamble, он записывает этот текст в область между заголовками и первой границей. Подробнее см.email.parserиemail.generator.Обратите внимание, что если у объекта сообщения нет преамбулы, то атрибут preamble будет
None.
-
epilogue -
Атрибут epilogue действует аналогично атрибуту preamble, за исключением того, что он содержит текст, появляющийся между последней границей и концом сообщения.
Не нужно устанавливать epilogue в пустую строку, чтобы
Generatorпечатал новую строку в конце файла.
-
defects -
Атрибут defects содержит список всех проблем, обнаруженных при парсинге этого сообщения. Подробное описание возможных дефектов парсинга см. в
email.errors.
-
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/library/email.compat32-message.html