我正在尝试将电子邮件中符合RFC 5322的“发件人:”字段解析为两部分:Python 2.7 中的显示名称和电子邮件地址(显示名称可能为空)。熟悉的例子是
John Smith <jsmith@example.org>
在上面,John Smith 是显示名称,jsmith@example.org 是电子邮件地址。但以下也是有效的“发件人:”字段:
"unusual" <"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com>
在本例中,display-name 的返回值为
"unusual"
和
"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com
是电子邮件地址。
您可以使用语法在 Perl 中解析它(如这些问题中所述:使用正则表达式验证电子邮件地址和“现代”正则表达式的识别能力),但我想在 Python 2.7 中执行此操作。我曾尝试在 Python 中使用 email.parser 模块,但该模块似乎只能分隔那些以冒号区分的字段。所以,如果你做类似的事情
from email.parser import Parser
headers = Parser().parsestr('From: "John Smith" <jsmith@example.org>')
print headers['from']
它会回来
"John Smith" <jsmith@example.com>
而如果将上面代码中的最后一行替换为
print headers['display-name']
它会回来
None
我将非常感谢任何建议和意见。