【发布时间】:2013-10-13 10:02:37
【问题描述】:
我正在尝试将电子邮件消息中符合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 中使用语法来解析它(如这些问题中所述:Using a regular expression to validate an email address 和 The recognizing power of “modern” regexes),但我想在 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
我将非常感谢任何建议和 cmets。
【问题讨论】:
-
我建议让它工作?您需要提供有关该问题的更多信息,然后才能有人提供更具体的帮助。
-
谢谢。你说得对。我会尽力澄清。
-
headers['display-name']没有意义。显示名称不是标头的字段,而是 From: ... 标头中的第一个电子邮件地址。