在Python中解析IMAP响应
我在用Python的imaplib库来处理IMAP,但发现它似乎没有办法解析IMAP响应的具体内容。举个例子,像这样的查询:
msgdata = connection.fetch(num, "(BODY.PEEK[HEADER.FIELDS (FROM TO CC DATE SUBJECT MESSAGE-ID)] UID)")
这里的num
是邮件的编号,不同的邮件服务器可能会返回不同的结果,比如:
('OK', [('1234 (BODY[HEADER.FIELDS (FROM TO CC DATE SUBJECT MESSAGE-ID)] {123}', 'From: ...etc headers'), ' UID 3456)'])
而另一个邮件服务器可能会返回:
('OK', [('1234 (UID 3456 BODY[HEADER.FIELDS (FROM TO CC DATE SUBJECT MESSAGE-ID)] {123}', 'From: ...etc headers'), ')'])
你可以看到,邮件的具体信息是不同的,UID(唯一标识符)甚至在不同的位置。所以我的问题是,有没有什么库可以帮助我自动处理这些差异,让我不用关心不同邮件服务器的具体实现?
3 个回答
1
看看Imbox,你可能会找到你想要的东西。这里是链接:https://pypi.org/project/imbox/
3
一个高级的IMAP库可能会很有用:https://github.com/ikvk/imap_tools
from imap_tools import MailBox
# get list of email subjects from INBOX folder
with MailBox('imap.mail.com').login('test@mail.com', 'password', 'INBOX') as mailbox:
data = [(msg.uid, msg.subject) for msg in mailbox.fetch()]
8
Doug Hellman 的 Python 每周模块介绍 里有关于 imaplib 的一个非常详细的教程,不过内容太长,不能在这里全部展示。
你可能会想使用一个更高级的库,比如 IMAPClient,这样可以隐藏一些 IMAP 协议的细节,让使用起来更简单。