我试图将电子邮件消息中符合RFC 5322的“发件人:”字段分为两部分:Python2.7中的显示名称和电子邮件地址(显示名称可以为空)。我们熟悉的例子是
John Smith <jsmith@example.org>
在上面,John Smith是显示名,并且jsmith@example.org是电子邮件地址。但以下也是有效的“发件人:”字段:
^{pr2}$在本例中,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),但我希望在Python2.7中这样做。我试过用电子邮件.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
如有任何建议和意见,我将不胜感激。在
headers['display-name']
不是email.parser
api的一部分。在试试看电子邮件.utils.parseaddr公司名称:
它还处理您不寻常的地址:
^{pr2}$我在C++中用libtld编写了这样的解析器。如果你真的想要完整的话,有lex和yacc(尽管我不使用这些工具)。我的C++ code可能会帮助您用python编写自己的版本。在
相关问题 更多 >
编程相关推荐