我正在使用Python解析邮箱文件,并在尝试使用get_all()
获取所有“收件人:”标头时偶然发现了一个奇怪的行为:
tos = message.get_all('to', [])
if tos:
tos = getaddresses(tos)
for to in tos:
receiver = EmailInformant()
receiver_email = to[1]
get_all()
获取所有“to:”值,这些值以逗号分隔,afaik。然后getaddresses
将单个接收器拆分为名称和电子邮件值。
对于以下“To:”标题,它无法正常工作:
To: example@test.de <example@test.de>
此处,电子邮件地址作为名称和电子邮件值提供,但解析器将其视为两个单独的“收件人:”条目,运行for循环两次。这是一个错误吗?
答案 0 :(得分:0)
解析电子邮件非常困难,因为有几个不同的规范,许多行为或定义不明确,以及不符合规范的实现。他们中的许多人在某些方面发生冲突。
我知道标准库中的电子邮件模块目前正在为Python 3.3重写,请参阅http://www.bitdance.com/blog/。重写应该解决这样的问题;如果你有这个选项,它目前在Python 3.2的pypi上可用:http://pypi.python.org/pypi/email。
同时,尝试tos = set(getaddresses(tos))
以消除重复。