email.utils: 杂项工具¶
源代码: Lib/email/utils.py
在 email.utils 模块中提供了多个有用的工具:
- email.utils.localtime(dt=None)¶
将本地时间作为一个感知型 datetime 对象返回。 如果不带参数地调用,则返回当前时间。 在其他情况下 dt 参数应为
datetime的实例,并将根据系统时区数据库将其转换为本地时区。 如果 dt 为简单型 (即dt.tzinfo为None),它将被视为本地时间。在 3.3 版本加入.
从 3.12 版起已弃用,已在 3.14 版中移除: isdst 形参。
- email.utils.make_msgid(idstring=None, domain=None)¶
返回一个适合作为兼容 RFC 2822 的 Message-ID 标头的字符串。 如果给出了可选的 idstring,应是用来加强消息 ID 唯一性的字符串。 如果给出了可选的 domain,将提供消息 ID 在 '@' 之后的部分。 默认值为本机的主机名。 通常不需要覆盖此默认值,但在特定情况下可能会有用处,比如构造一个分布式系统在多台主机上使用一致的域名。
在 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 之类包含地址的字段值)解析为其构成部分:真实名字 和 电子邮件地址 部分。返回包含这两个信息的一个元组;如若解析失败,则返回一个二元组
('', '')。如果 strict 为真值,将使用拒绝错误形式输入的严格解析器。
在 3.13 版本发生变更: 增加了 strict 可选形参并将默认拒绝错误形式输入。
- email.utils.formataddr(pair, charset='utf-8')¶
parseaddr()的逆操作,它接受一个(realname, email_address)形式的 2 元组并返回适合作为 To 或 Cc 标头的字符串值。 如果 pair 的第一个元素为假值,则原样返回第二个元素。可选地,如果指定 charset,则被视为一个符合 RFC 2047 的编码字符集,用于编码
realname中的非 ASCII 字符。可以是一个str类的实例,或者一个Charset类。默认为utf-8.在 3.3 版本发生变更: 添加了 charset 选项。
- email.utils.getaddresses(fieldvalues, *, strict=True)¶
此函数返回一个与
parseaddr()返回值相同形式的 2 元组的列表。 fieldvalues 是可由Message.get_all()返回的由标头字段值组成的序列。如果 strict 为真值,将使用拒绝错误形式输入的严格解析器。
下面简单示例可获取一条消息的所有接收方:
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.13 版本发生变更: 增加了 strict 可选形参并将默认拒绝错误形式输入。
- email.utils.parsedate(date)¶
尝试根据 RFC 2822 Section 3.3 中的规则解析日期。然而,某些邮件发送者并未按照指定格式执行,因此
parsedate()会在此类情况下尝试进行正确推测。date 是一个包含 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 (格林威治平均时 GMT 的正式名称) [1] 的时差。 如果输入字符串不带时区,则所返回元组的最后一个元素将为0,这表示 UTC。请注意结果元组的索引号 6, 7 和 8 是不可用的。
- email.utils.parsedate_to_datetime(date)¶
format_datetime()的逆操作。其功能与parsedate()相同,但成功时返回一个datetime;否则,若 date 包含无效值(例如小时数超过 23,或时区偏移量不在 -24 至 24 小时之间),则会抛出ValueError。如果输入日期的时区为-0000,则datetime将是一个未考虑时区的datetime;若该日期符合 RFC 规范,则它将表示一个 UTC 时间,但不包含该日期所源自消息实际时区的信息。如果输入日期的时区偏移量为其他任何有效值,则datetime将是一个考虑时区的datetime,其对应的tzinfo属性为timezone对象。在 3.3 版本加入.
- email.utils.mktime_tz(tuple)¶
将
parsedate_tz()所返回的 10 元组转换为一个 UTC 时间戳(相距 Epoch 纪元初始的秒数)。如果元组中的时区项为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时,会以 ASCII 字符串形式输出包含时区的日期字符串GMT,而不是以数字形式输出-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)¶
根据 RFC 2231 对字符串 s 进行编码。如果提供了可选的 charset 和 language,则分别表示要使用的字符集名称和语言名称。如果两者均未提供,则原样返回 s。如果提供了 charset 但未提供 language,则使用空字符串作为 language 对字符串进行编码。
- email.utils.collapse_rfc2231_value(value, errors='replace', fallback_charset='us-ascii')¶
当头部参数以 RFC 2231 格式编码时,
Message.get_param()可返回一个包含字符集、语言和值的三元组。collapse_rfc2231_value()将其转换为字符串。可选参数 errors 会被传递给str的encode()方法的 errors 参数;其默认值为'replace'。可选参数 fallback_charset 用于指定:如果 RFC 2231 头部中的字符集为 Python 所不支持的字符集,则应使用哪个字符集;其默认值为'us-ascii'。为方便起见,如果传给
collapse_rfc2231_value()的 value 不是一个元组,则应为一个字符串并会将其去除引号后返回。
- email.utils.decode_params(params)¶
根据 RFC 2231 解码参数列表。 params 是一个包含
(content-type, string-value)形式的元素的 2 元组的序列。
脚注