Python/imaplib - 如何获取消息的标签?

Posted

技术标签:

【中文标题】Python/imaplib - 如何获取消息的标签?【英文标题】:Python/imaplib - How to get messages' labels? 【发布时间】:2011-09-01 15:55:44 【问题描述】:

我在我的项目中使用 imaplib,因为我需要访问 gmails 帐户。 事实:使用 gmail 的标签,每条消息可能位于任意数量的文件夹/框/标签上。

问题是我想从每条消息中获取每个标签。

我想到的第一个解决方案是使用“所有邮件”文件夹来获取所有邮件,然后对于每封邮件,检查该邮件是否在每个可用文件夹中。

但是,我发现这个解决方案很繁重,我想知道是否有更好的方法来做到这一点。

谢谢!

【问题讨论】:

gist.github.com/1323795的示例代码 【参考方案1】:

在 imap 中你没有标签,gmail 在 imap 上“模拟”它们,你可以从 imap 中挑选消息的原始来源,检查它是否有带有标签的自定义标题

【讨论】:

我明白你在说什么,首先,感谢你的帮助。但是,我不认为那是方法。 Gmail 似乎没有使用标签的任何自定义标头来标记邮件。有什么意义,否则每次用户从电子邮件中添加/更改/删除标签时,他们都必须更改消息。它们似乎只是有框,一条消息(可能是对消息的引用)可以同时在多个框中。 所以我认为您可以为每条消息获取 (RFC822.HEADER),您可以使用 uid('FETCH', '1:*' , '(RFC822.HEADER)') (不要已知有一个特定的 imaplib 命令),由于 messageid 不够,然后对结果进行哈希处理,即使用 md5 或 sha,制作带有文件夹的 python dict。对于所有文件夹中的每条消息,您可以检查每个文件夹中是否存在。这不是非常理想,但使用 gmail,您可以在多个文件夹中拥有相同的消息,因为它们是多个标签,gmail 不提供自定义标题。无论如何,整个过程并不是很慢,因为您只选择标题 你也可以只使用message-id+sender+dest+date【参考方案2】:

要在 gmail 中获取给定消息的所有标签,您可以执行以下操作

t, d = imapconn.uid('FETCH', uid, '(X-GM-LABELS)')
or
t, d = imapconn.fetch(uid, '(X-GM-LABELS)')

顺便说一句:您可以在http://code.google.com/apis/gmail/imap/找到更多关于 gmail imap 扩展的信息

【讨论】:

非常感谢!这正是我想要的 =D 嘿,我也有类似的问题,(***.com/questions/24361257/…),你能过去看看吗?谢谢!

以上是关于Python/imaplib - 如何获取消息的标签?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python imaplib 为 IMAP (Gmail) 启用推送通知?

Python imaplib 获取正文电子邮件 gmail

Python imaplib 选择文件夹

Python imaplib 使用日期和时间搜索电子邮件

利用Python imaplib和email模块 读取邮件文本内容及附件内容

使用 python imaplib 从 Gmail 中“删除”一封电子邮件?