在Python中解析IMAP响应

9 投票
3 回答
13381 浏览
提问于 2025-04-16 08:39

我在用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 协议的细节,让使用起来更简单。

撰写回答