在 python 中解析 IMAP 响应

Posted

技术标签:

【中文标题】在 python 中解析 IMAP 响应【英文标题】:Parsing IMAP responses in python 【发布时间】:2011-05-26 20:58:22 【问题描述】:

我在 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 甚至在不同的元素中。所以问题是 - 是否有一些库可以自动将其分类并抽象出特定邮件服务器的详细信息?

【问题讨论】:

【参考方案1】:

Doug Hellman 的 Python Module of the Week entry for imaplib 是关于该主题的相当广泛的教程,但在这里复制的时间太长了。

您可能希望使用更高级别的库,例如 IMAPClient 来隐藏 IMAP 协议的一些细节。

【讨论】:

不幸的是,Doug 的教程在解析更复杂的 fetch() 响应的主题上略过。感谢您提供指向 IMAPClient 的链接,我会检查一下。【参考方案2】:

看看 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()]

【讨论】:

以上是关于在 python 中解析 IMAP 响应的主要内容,如果未能解决你的问题,请参考以下文章

进程池Pool的imap方法解析

imaplib2:imap.gmail.com 处理程序 BYE 响应:系统错误

如何格式化 XML 响应 - Python

centos漏洞-LibCurl IMAP响应处理不当导致缓冲区溢出漏洞

在 Python 中解析 HTTP 响应

IMAP UID FETCH BODY.PEEK[] 命令响应