使用Python IMAP获取发件人电子邮件地址

时间:2011-03-02 23:20:40

标签: python email imap

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

示例:

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中我只能得到w / address的全名,我怎么能单独获取地址?我目前使用这个:

    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']

谢谢!

3 个答案:

答案 0 :(得分:14)

使用email.utils再一步:

  

email.utils.parseaddr(address)

     

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

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

答案 1 :(得分:0)

to = email.utils.parseaddr(msg['cc'])

这对我有用。

答案 2 :(得分:0)

我的外部库 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'