Python email.utils.parseaddr 详解
parseaddr 是 Python 标准库 email.utils 模块中的一个实用函数,专门用于解析电子邮件地址字符串,它能够将包含姓名和邮箱地址的组合字符串拆分为一个元组。
基本功能
在电子邮件系统中,地址经常以 "Real Name <email@example.com>" 的格式出现。parseaddr 的作用就是将这种格式的字符串解析为两个部分:真实姓名 (Real Name) 和 电子邮件地址 (Email Address)。
语法与返回值
语法:
from email.utils import parseaddr result = parseaddr(address_string)
返回值:
返回一个包含两个元素的
元组 (Tuple):(realname, email_address)。
- realname: 提取出的姓名部分(如果没有则为空字符串)。
- email_address: 提取出的纯邮箱地址部分。
代码示例
以下是 parseaddr 处理不同输入场景的示例:
from email.utils import parseaddr
# 场景 1:标准格式(姓名 + 邮箱)
addr1 = "Zhang San <zhangsan@example.com>"
print(f"输入: {addr1} -> 解析结果: {parseaddr(addr1)}")
# 输出: ('Zhang San', 'zhangsan@example.com')
# 场景 2:仅有邮箱地址
addr2 = "lisi@example.com"
print(f"输入: {addr2} -> 解析结果: {parseaddr(addr2)}")
# 输出: ('', 'lisi@exa
mple.com')
# 场景 3:包含引号的姓名
addr3 = '"Wang Wu" <wangwu@example.com>'
print(f"输入: {addr3} -> 解析结果: {parseaddr(addr3)}")
# 输出: ('Wang Wu', 'wangwu@example.com')
# 场景 4:非法或空字符串
addr4 = "invalid-address"
print(f"输入: {addr4} -> 解析结果: {parseaddr(addr4)}")
# 输出: ('', 'invalid-address')
核心要点总结
- 自动去引号:如果姓名部分被双引号包裹(如
"John Doe"),parseaddr会自动去除引号,只保留纯文本。 - 容错性:即使输入不符合标准的 RFC 格式,它也不会抛出异常,而是尽可能地尝试解析,无法解析的部分会返回空字符串。
- 适用场景
:
- 处理邮件头(Headers)中的
From或To字段。 - 从用户输入中提取纯邮箱地址以进行数据库存储。
- 清洗包含多样化格式的联系人列表。
- 处理邮件头(Headers)中的
注意事项
- 验证能力有限:
parseaddr仅用于解析(Parsing),而不是验证(Validation),它不会检查邮箱地址是否符合真实的语法规范(例如是否包含 符号),如果需要验证邮箱合法性,建议使用正则表达式或第三方库如email-validator。 - 编码问题:对于包含非 ASCII 字符(如中文)的编码地址,建议结合
email.header.decode_header一起使用,以确保正确处理字符集。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/492446.html



