gpt4 book ai didi

python - 在 Python 中解析电子邮件的 "From:"字段

转载 作者:太空狗 更新时间:2023-10-30 02:20:59 25 4
gpt4 key购买 nike

我正在尝试解析 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 addressThe 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

我将非常感谢任何建议和意见。

最佳答案

headers['display-name'] 不是 email.parser api 的一部分。

试试 email.utils.parseaddr:

In [17]: email.utils.parseaddr("jsmith@example.com")
Out[17]: ('', 'jsmith@example.com')

In [18]: email.utils.parseaddr("(John Smith) jsmith@example.com")
Out[18]: ('John Smith', 'jsmith@example.com')

In [19]: email.utils.parseaddr("John Smith <jsmith@example.com>")
Out[19]: ('John Smith', 'jsmith@example.com')

它还会处理您的不寻常地址:

In [21]: email.utils.parseaddr('''"unusual" <"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com>''')
Out[21]: ('unusual', '"very.(),:;<>[]".VERY."very@ "very".unusual"@strange.example.com')

关于python - 在 Python 中解析电子邮件的 "From:"字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19214539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com