You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.8.10中email.utils.parseaddr解析邮件头地址异常

问题分析与解决

你遇到的问题是因为email.utils.parseaddr()遵循RFC邮件格式规范,显示名中包含逗号时必须用双引号包裹,否则会把逗号识别为多个地址的分隔符,导致解析错误。

为什么会出错?

在你的测试用例里:

testHdr = "LastName, FirstName <FirstName.LastName@domain.com>"

parseaddr()会把逗号前的LastName当成第一个无邮箱地址的显示名,直接返回('', 'LastName'),剩下的部分被当作另一个地址但被忽略了——因为parseaddr()只返回解析到的第一个地址。

解决方案

有两种处理方式:

1. 修正邮件头格式(符合RFC规范)

把包含逗号的显示名用双引号包裹,这样parseaddr()就能正常解析:

import email.utils

testHdr = "\"LastName, FirstName\" <FirstName.LastName@domain.com>"
print(email.utils.parseaddr(testHdr))  # 输出 ('LastName, FirstName', 'FirstName.LastName@domain.com')

2. 使用更健壮的getaddresses() API

如果无法修改输入的邮件头格式,改用email.utils.getaddresses(),它能处理逗号分隔的地址列表,即使显示名未加引号也能正确解析:

import email.utils

testHdr = "LastName, FirstName <FirstName.LastName@domain.com>"
# getaddresses接收地址列表(这里把单个字符串放列表里),返回所有解析到的地址元组
address_list = email.utils.getaddresses([testHdr])
print(address_list[0])  # 输出 ('LastName, FirstName', 'FirstName.LastName@domain.com')

总结

不是你用法错误,而是输入的邮件头格式不符合RFC规范,或者你可以选择更适合处理这类场景的getaddresses() API。

内容的提问来源于stack exchange,提问作者dawydiuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:05:17