【问题标题】:Get sender email address with Python IMAP使用 Python IMAP 获取发件人电子邮件地址
【发布时间】:2011-03-02 23:20:39
【问题描述】:

我有这个 python IMAP 脚本,但我的问题是,每次我想获取发件人的电子邮件地址(发件人)时,我总是得到发件人的名字后跟他们的电子邮件地址:

例子:

Souleiman Benhida <souleb@gmail.com>

我怎样才能提取电子邮件地址 (souleb@gmail.com)

我以前用 PHP 做过这个:

    $headerinfo = imap_headerinfo($connection, $count)
    or die("Couldn't get header for message " . $count . " : " . imap_last_error());
$from = $headerinfo->fromaddress;

但是,在 python 中,我只能得到带地址的全名,我怎样才能单独得到地址呢?我目前使用这个:

    typ, data = M.fetch(num, '(RFC822)')
mail = email.message_from_string(data[0][1])
headers = HeaderParser().parsestr(data[0][1]) 
message = parse_message(mail)  #body
org = headers['From']

谢谢!

【问题讨论】:

    标签: python email imap


    【解决方案1】:

    再上一步,使用email.utils

    email.utils.parseaddr(address)

    将地址(应该是某些包含地址的字段(例如 To 或 Cc)的值)解析为其组成的实名和电子邮件地址部分。返回该信息的元组,除非解析失败,在这种情况下返回 ('', '') 的 2 元组。

    注意:最初引用 rfc822,现在已弃用。

    【讨论】:

    【解决方案2】:
    to = email.utils.parseaddr(msg['cc'])
    

    这对我有用。

    【讨论】:

      【解决方案3】:

      我的外部库https://github.com/ikvk/imap_tools 让您使用邮件而不是阅读 IMAP 规范。

      from imap_tools import MailBox, A
      
      # get all emails from INBOX folder
      with MailBox('imap.mail.com').login('test@mail.com', 'pwd', 'INBOX') as mailbox:
          for msg in mailbox.fetch(A(all=True)):
              print(msg.date, msg.from_, msg.to, len(msg.text or msg.html))
      

      msg.from_, msg.to - 解析后的地址,例如:'Sender@ya.ru'

      【讨论】:

        猜你喜欢
        • 2012-02-24
        • 1970-01-01
        • 2011-03-27
        • 1970-01-01
        • 1970-01-01
        • 2018-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多