email.utils: Прочие утилиты¶
Исходный код: Lib/email/utils.py
В модуле email.utils есть несколько полезных утилит:
- email.utils.localtime(dt=None)¶
Возвращает местное время как объект datetime с поддержкой datetime. Если вызывается без аргументов, возвращает текущее время. В противном случае аргументом dt должен быть
datetime, и он преобразуется в местный часовой пояс в соответствии с базой данных системных часовых поясов. Если значение dt является наивным (то естьdt.tzinfoравноNone), предполагается, что оно соответствует местному времени. В этом случае положительное или нулевое значение для isdst приводит к тому, чтоlocaltimeизначально предполагает, что летнее время (например, переход на летнее время) действует или не действует (соответственно) в течение указанного времени. Отрицательное значение для isdst приводит к тому, чтоlocaltimeпытается определить, действует ли летнее время в течение указанного времени.Добавлено в версии 3.3.
- email.utils.make_msgid(idstring=None, domain=None)¶
Возвращает строку, подходящую для RFC 2822-совместимого Message-ID заголовка. Необязательно idstring, если указано, - это строка, используемая для повышения уникальности идентификатора сообщения. Необязательный домен, если он указан, содержит часть идентификатора msgid после «@». По умолчанию используется имя локального хоста. Обычно нет необходимости переопределять это значение по умолчанию, но в некоторых случаях это может быть полезно, например, при построении распределенной системы, которая использует согласованное доменное имя на нескольких хостах.
Изменено в версии 3.2: Добавлено ключевое слово domain.
Остальные функции являются частью устаревшего (Compat32) почтового API. Нет необходимости напрямую использовать их с новым API, поскольку синтаксический анализ и форматирование, которые они предоставляют, выполняются автоматически с помощью механизма синтаксического анализа заголовков нового API.
- email.utils.quote(str)¶
Возвращает новую строку с обратной косой чертой в str, замененной двумя обратными косыми чертами, и двойными кавычками, замененными обратной косой чертой-двойной кавычкой.
- email.utils.unquote(str)¶
Возвращает новую строку, которая является версией str без кавычек. Если str заканчивается и начинается с двойных кавычек, они удаляются. Аналогично, если str заканчивается и начинается с угловых скобок, они удаляются.
- email.utils.parseaddr(address, *, strict=True)¶
Разберите адрес, который должен быть значением некоторого поля, содержащего адрес, такого как To или Cc, на составляющие его части реальное имя и адрес электронной почты. Возвращает кортеж с этой информацией, если только синтаксический анализ не завершается ошибкой, и в этом случае возвращается 2-й кортеж из
('', '').Если значение strict равно true, используйте строгий синтаксический анализатор, который отклоняет искаженные входные данные.
Изменено в версии 3.11.10: Добавьте необязательный параметр strict и по умолчанию отклоняйте неверные входные данные.
- email.utils.formataddr(pair, charset='utf-8')¶
В отличие от
parseaddr(), это принимает 2-й кортеж вида(realname, email_address)и возвращает строковое значение, подходящее для заголовка To или Cc. Если первый элемент pair имеет значение false, то второй элемент возвращается без изменений.Необязательный набор символов - это набор символов, который будет использоваться в RFC 2047 кодировке
realname, еслиrealnameсодержит символы, отличные от ASCII. Может быть экземпляромstrилиCharset. По умолчанию используется значениеutf-8.Изменено в версии 3.3: Добавлена опция charset.
- email.utils.getaddresses(fieldvalues, *, strict=True)¶
Этот метод возвращает список из 2 кортежей формы, возвращаемой
parseaddr(). fieldvalues - это последовательность значений полей заголовка, которые могут быть возвращеныMessage.get_all.Если значение strict равно true, используйте строгий синтаксический анализатор, который отклоняет искаженные входные данные.
Вот простой пример, который показывает всех получателей сообщения:
from email.utils import getaddresses tos = msg.get_all('to', []) ccs = msg.get_all('cc', []) resent_tos = msg.get_all('resent-to', []) resent_ccs = msg.get_all('resent-cc', []) all_recipients = getaddresses(tos + ccs + resent_tos + resent_ccs)
Изменено в версии 3.11.10: Добавьте необязательный параметр strict и по умолчанию отклоняйте неверные входные данные.
- email.utils.parsedate(date)¶
Пытается разобрать дату в соответствии с правилами, указанными в RFC 2822. Однако некоторые почтовые программы не придерживаются указанного формата, поэтому
parsedate()в таких случаях пытается угадать правильно. дата - это строка, содержащая RFC 2822 дату, например"Mon, 20 Nov 1995 19:12:08 -0500". Если ему удается проанализировать дату,parsedate()возвращает кортеж из 9 элементов, который может быть передан непосредственно вtime.mktime(); в противном случае будет возвращенNone. Обратите внимание, что индексы 6, 7 и 8 результирующего кортежа недоступны для использования.
- email.utils.parsedate_tz(date)¶
Выполняет ту же функцию, что и
parsedate(), но возвращает либоNone, либо кортеж из 10 элементов; первые 9 элементов составляют кортеж, который может быть передан непосредственно вtime.mktime(), а десятый - это смещение датычасовой пояс от UTC (который является официальным обозначением среднего времени по Гринвичу) [1]. Если во входной строке нет часового пояса, последним элементом возвращаемого кортежа будет0, который представляет UTC. Обратите внимание, что индексы 6, 7 и 8 результирующего кортежа не используются.
- email.utils.parsedate_to_datetime(date)¶
Величина, обратная
format_datetime(). Выполняет ту же функцию, что иparsedate(), но в случае успеха возвращает значениеdatetime; в противном случаеValueErrorвызывается, если date содержит недопустимое значение, например, значение часа больше 23 или смещение часового пояса не между -24 и 24 несколько часов. Если входная дата имеет часовой пояс-0000, тоdatetimeбудет наивным значениемdatetime, и если дата соответствует RFC, она будет представлять время в UTC, но без указания фактического источника часовой пояс сообщения, из которого приходит дата. Если входная дата имеет какое-либо другое допустимое смещение по часовому поясу, тоdatetimeбудет отображаться какdatetimeс соответствующимtimezonetzinfo.Добавлено в версии 3.3.
- email.utils.mktime_tz(tuple)¶
Преобразуйте кортеж из 10 элементов, возвращаемый с помощью
parsedate_tz(), во временную метку UTC (секунды с момента начала эпохи). Если значение часового пояса в кортеже равноNone, укажите местное время.
- email.utils.formatdate(timeval=None, localtime=False, usegmt=False)¶
Возвращает строку даты в соответствии с RFC 2822, например:
Fri, 09 Nov 2001 01:08:47 -0000
Необязательно timeval, если задано значение времени с плавающей запятой, принятое в
time.gmtime()иtime.localtime(), в противном случае используется текущее время.Необязательный localtime - это флаг, который при
Trueинтерпретирует timeval и возвращает дату относительно местного часового пояса вместо UTC, должным образом учитывая переход на летнее время. Значение по умолчанию равноFalse, что означает использование UTC.Необязательный usegmt - это флаг, который при
Trueвыводит строку даты с часовым поясом в виде строки asciiGMT, а не числовой-0000. Это необходимо для некоторых протоколов (например, HTTP). Это применимо только в том случае, если значение localtime равноFalse. Значение по умолчанию равноFalse.
- email.utils.format_datetime(dt, usegmt=False)¶
Как
formatdate, но входными данными является экземплярdatetime. Если это наивная дата-время, то предполагается, что это «UTC без информации об исходном часовом поясе», а для часового пояса используется обычный-0000. Если это значениеdatetime, то используется числовое смещение часового пояса. Если это активный часовой пояс с нулевым смещением, то для параметра usegmt может быть установлено значениеTrue, и в этом случае вместо числового смещения часового пояса используется строкаGMT. Это обеспечивает способ создания соответствующих стандартам HTTP-заголовков дат.Добавлено в версии 3.3.
- email.utils.encode_rfc2231(s, charset=None, language=None)¶
Закодируйте строку s в соответствии с RFC 2231. Необязательные кодировка и язык, если заданы, - это имя набора символов и название языка для использования. Если ни то, ни другое не задано, s возвращается как есть. Если задана кодировка, а язык - нет, строка кодируется с использованием пустой строки для языка.
- email.utils.collapse_rfc2231_value(value, errors='replace', fallback_charset='us-ascii')¶
Когда параметр заголовка закодирован в формате RFC 2231,
Message.get_paramможет возвращать кортеж из 3 символов, содержащий набор символов, язык и значение.collapse_rfc2231_value()преобразует это в строку в юникоде. Необязательный параметр errors передается в аргумент errors методаstrencode(); по умолчанию используется значение'replace'. Необязательный fallback_charset указывает набор символов, который следует использовать, если кодировка в заголовке RFC 2231 неизвестна Python; по умолчанию используется'us-ascii'.Для удобства, если значение, передаваемое в
collapse_rfc2231_value(), не является кортежем, оно должно быть строкой и возвращается без кавычек.
- email.utils.decode_params(params)¶
Расшифруйте список параметров в соответствии с RFC 2231. params - это последовательность из 2-х кортежей, содержащих элементы вида
(content-type, string-value).
Сноски