我有这个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']
谢谢!
答案 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'