【问题标题】:How to obtain the recipient list from email using IMAPClient in Python如何在 Python 中使用 IMAPClient 从电子邮件中获取收件人列表
【发布时间】:2015-10-23 09:17:26
【问题描述】:

我正在使用Python 中的IMAPClient 库。我可以下载电子邮件中的附件。我只对 Excel 文件感兴趣。

我有兴趣从电子邮件中提取收件人列表。知道如何在Python 中做到这一点吗?

这里是可能有用的代码 sn-p

for ind_mail in emails:
    msg_string = ind_mail['RFC822'].decode("utf-8")
    #print(msg_string.decode("utf-8"))
    email_msg = email.message_from_string(msg_string)

    for part in email_msg.walk():

        # Download only Excel File
        filetype = part.get_content_type()

        if(filetype == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'):
            #download

【问题讨论】:

  • 您的问题并不完全明确。邮件标头可以包含少量To:Cc:Bcc:,它们都不能保证包含实际的收件人;如果重新发送消息,Resent-To:Resent-Cc: 等会覆盖这些消息,但需要注意的是。信封收件人列表不存储在任何地方,但许多现代邮件服务器添加了类似Delivered-To: 的内容,以识别哪个本地收件人实际收到了邮件。您能否详细说明您希望提取哪些信息?

标签: python email rfc822 imapclient


【解决方案1】:

您的问题的直接答案是获取相应标题的值,即:

to_rcpt = email_msg.get_all('to', [])
cc_rcpt = email_msg.get_all('cc', [])

,在第一个循环中。 MIME 标准不强制标头的唯一性(尽管强烈建议这样做),因此 get_all;如果不存在,您仍然会有一个连续循环的空列表。

但正如 Tripleee 正确指出的那样,mime 标题很容易被审查、欺骗或简单地删除。 然而,这是服务器保存和返回的唯一信息,所有邮件客户端都用来呈现给我们:)

【讨论】:

    【解决方案2】:

    调用msg.get_all 将返回一个列表,其中每个标题包含一个条目,因此如果您有多个标题,则每个标题都会得到一个列表

    但是

    如果一个标头以逗号分隔的方式包含多封电子邮件,则您只会得到一个字符串,并且必须将其拆分。

    获得来自特定标头的所有电子邮件列表的最佳方法是使用getaddresses (https://docs.python.org/3/library/email.utils.html#email.utils.getaddresses)

    from email.utils import getaddresses
    
    to_rcpt = getaddresses(email_msg.get_all('to', []))
    

    get_all 将返回一个包含所有“To:”标头的数组,getaddresses 将解析每个条目并返回每个标头上存在的尽可能多的电子邮件。例如:

    message = """
    To: "Bob" <email1@gmail.com>, "John" <email2@gmail.com>
    To: email3@gmail.com, email4@gmail.com
    """
    
    to_rcpt = getaddresses(email_msg.get_all('to', []))
    => [('Bob', 'email1@gmail.com'), ('John', 'email2@gmail.com'), ('', 'email3@gmail.com'), ('', 'email4@gmail.com')]
    

    【讨论】:

      猜你喜欢
      • 2014-07-27
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      相关资源
      最近更新 更多