IMAPClient - 如何获取主题和发件人?

时间:2016-05-12 15:10:22

标签: python email imap imapclient

我试图创建一个简单的程序来检查和显示未读消息,但是在尝试获取主题和发件人地址时我遇到了问题。 对于发件人,我尝试过这种方法:

import email
m = server.fetch([a], ['RFC822']) 
#a is variable with email id
msg = email.message_from_string(m[a], ['RFC822'])
print msg['from']
from email.utils import parseaddr
print parseaddr(msg['from'])

但它没有用。我收到了这个错误:

Traceback (most recent call last):
File "C:/Users/ExampleUser/AppData/Local/Programs/Python/Python35-32/myprogram.py", line 20, in <module>
msg = email.message_from_string(m[a], ['RFC822'])
File "C:\Users\ExampleUser\AppData\Local\Programs\Python\Python35-32\lib\email\__init__.py", line 38, in message_from_string
return Parser(*args, **kws).parsestr(s)
File "C:\Users\ExampleUser\AppData\Local\Programs\Python\Python35-32\lib\email\parser.py", line 68, in parsestr
return self.parse(StringIO(text), headersonly=headersonly)
TypeError: initial_value must be str or None, not dict

我也用过这个:

print(server.fetch([a], ['BODY[HEADER.FIELDS (FROM)]']))

但结果如下:

defaultdict(<class 'dict'>, {410: {b'BODY[HEADER.FIELDS ("FROM")]': b'From: "=?utf-8?q?senderexample?=" <sender@example.com>\r\n\r\n', b'SEQ': 357}, 357: {b'SEQ': 357, b'FLAGS': (b'\\Seen',)}})

有没有办法修复第一种方法,或者使第二种方法看起来像:

Sender Example <sender@example.com>

? 而且我也不知道如何获得电子邮件主题。但我想它与发件人相同,但与其他论点相同。所以我唯一需要的就是这些论点。

1 个答案:

答案 0 :(得分:0)

首先,您应该查看可用于Python的各种IMAP库,并使用符合您需求的库。有多种方法可以在IMAP(协议)中获取所需的数据,也可以在Python(及其库)中获取所需的数据。

例如,在IMAP协议中获取所需数据的最简单方法是获取ENVELOPE对象。您仍然必须执行非ASCII数据的RFC2047编码的解码(您=?utf-8?q?...位所见的那个),但至少它可以帮助您解析RFC5322标头结构具有数十年的兼容性语法规则。