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

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

问题描述:

我试图做一个简单的程序来检查并显示未读消息,但我在尝试获取主题和发件人地址时遇到问题。 对于寄件人我试过这个方法: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?=" <[email protected]>\r\n\r\n', b'SEQ': 357}, 357: {b'SEQ': 357, b'FLAGS': (b'\\Seen',)}}) 

有没有办法来修复第一种方法,或使第二个看起来像这样的结果:

Sender Example <[email protected]> 

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

您应该首先查看可用于Python的各种IMAP库并使用适合您需要的库。在IMAP(协议)中有多种获取所需数据的方法,并且还可以通过Python(及其库)进行扩展。

例如,在IMAP协议中获取所需数据的最直接的方法是获取ENVELOPE对象。您仍然需要对非ASCII数据的RFC2047编码进行解码(即您看到的=?utf-8?q?...位),但至少它可以帮助您解决具有数十年兼容性语法规则的RFC5322标头结构。