我希望使用 IMAP 从电子邮件帐户收件箱返回 n(最有可能是 10)封最近的电子邮件。
到目前为止,我拼凑了:
import imaplib
from email.parser import HeaderParser
M = imaplib.IMAP4_SSL('my.server')
user = 'username'
password = 'password'
M.login(user, password)
M.search(None, 'ALL')
for i in range (1,10):
data = M.fetch(i, '(BODY[HEADER])')
header_data = data[1][0][1]
parser = HeaderParser()
msg = parser.parsestr(header_data)
print msg['subject']
这可以很好地返回电子邮件标头,但它似乎是它收到的电子邮件的半随机集合,而不是最近的 10 封。
如果有帮助,我正在连接到 Exchange 2010 服务器。也欢迎其他方法,考虑到我只想阅读电子邮件而不发送任何电子邮件,IMAP 似乎是最合适的。
原文由 mrmagooey 发布,翻译遵循 CC BY-SA 4.0 许可协议
排序命令可用,但不保证 IMAP 服务器支持它。例如,Gmail 不支持 SORT 命令。
要尝试排序命令,您将替换:
M.search(None, 'ALL')
和
M.sort(search_critera, 'UTF-8', 'ALL')
然后
search_criteria
将是一个类似这样的字符串:根据 RFC5256 ,这些是有效的
sort-key
的:"ARRIVAL" / "CC" / "DATE" / "FROM" / "SIZE" / "SUBJECT" / "TO"
笔记:
1. charset 是必需的,尝试
US-ASCII
或UTF-8
所有其他的都不需要IMAP服务器支持2. 搜索条件也是必需的。
ALL
命令是有效的,但有很多。在 http://www.networksorcery.com/enp/rfc/rfc3501.txt 查看更多IMAP 的世界是疯狂的。祝你好运