使用Python 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中,我只能得到完整的名字和地址,怎么才能单独获取地址呢?我现在使用的是:
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']
谢谢!
4 个回答
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'
0
to = email.utils.parseaddr(msg['cc'])
这个对我来说有效。
21
再来一步,使用 email.utils:
email.utils.parseaddr(address)
这个函数可以解析一个地址,通常是像“收件人”或“抄送”这样的字段里的值。它会把这个地址拆分成真实姓名和电子邮件地址两部分。如果解析成功,它会返回一个包含这两部分信息的元组;如果解析失败,就会返回一个包含两个空字符串的元组 ('', '')。
注意:这个函数最初是参考了 rfc822
,但现在已经不再使用了。