如何从 Python 中的 RFC 2822 邮件标头中提取多个电子邮件地址?

vy3*_*y32 6 python email rfc822

Python 的email模块非常适合解析头文件。但是,To:header 可以有多个接收者,也可能有多个To:header。那么如何拆分每个电子邮件地址呢?我不能在逗号上拆分,因为可以引用逗号。有没有办法做到这一点?

演示代码:

msg="""To: user1@company1.com, "User Two" <user2@company2.com", "Three, User <user3@company3.com>                               
From: anotheruser@user.com                                                                                                      
Subject: This is a subject                                                                                                      

This is the message.                                                                                                            
"""

import email

msg822 = email.message_from_string(msg)
for to in msg822.get_all("To"):
    print("To:",to)
Run Code Online (Sandbox Code Playgroud)

电流输出:

$ python x.py
To: user1@company1.com, "User Two" <user2@company2.com", "Three, User <user3@company3.com>
$ 
Run Code Online (Sandbox Code Playgroud)

Rob*_*obᵩ 6

通过所有Toemail.utils.getaddresses()

msg="""To: user1@company1.com, John Doe <user2@example.com>, "Public, John Q." <user3@example.com>
From: anotheruser@user.com
Subject: This is a subject

This is the message.
"""

import email

msg822 = email.message_from_string(msg)
for to in email.utils.getaddresses(msg822.get_all("To", [])):
    print("To:",to)
Run Code Online (Sandbox Code Playgroud)

请注意,我重写了您的To行。我相信您的示例不是有效格式。

参考:https : //docs.python.org/3/library/email.utils.html#email.utils.getaddresses