如何在Python中进行IMAP搜索(使用Gmail和imaplib)?

12 投票
5 回答
18956 浏览
提问于 2025-04-11 09:26

在Gmail里,我有很多带标签的邮件。

我想用一个IMAP客户端来获取这些邮件,但我不太确定该怎么搜索。

c = imaplib.IMAP4_SSL('imap.gmail.com')
c.list()
('OK', [..., '(\\HasNoChildren) "/" "GM"', ...])
c.search(???)

我没有找到很多关于这方面的例子。

5 个回答

6

根据谷歌的说法,标签的使用方式和IMAP文件夹是一样的。

9

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当你想要检查一个数字是否在某个范围内时,你可以使用条件语句来实现这个功能。

条件语句就像是一个判断的开关,它会根据你设定的条件来决定程序的走向。如果条件满足,程序就会执行某些代码;如果不满足,程序就会跳过这些代码。

举个例子,假设你有一个数字,你想知道它是不是大于10。如果是,程序就会打印“这个数字大于10”;如果不是,程序就会打印“这个数字不大于10”。这样,你就能根据不同的情况得到不同的结果。

这种方式在编程中非常常见,因为它可以让程序更灵活,能够根据不同的输入做出不同的反应。

import imaplib 
obj = imaplib.IMAP4_SSL('imap.gmail.com', 993)
obj.login('username', 'password')
obj.select('**label name**') # <-- the label in which u want to search message
obj.search(None, 'FROM', '"LDJ"')
12

imaplib 是一个对 IMAP 协议的简单封装,目的是为了让用户有更多的灵活性,并能更好地适应 IMAP 规范的变化。因此,它并没有提供什么固定的结构来帮助你构建搜索查询,你需要对 IMAP 规范 有一定了解。

在“6.4.4. SEARCH 命令”这一部分,你会看到可以用来搜索的条件有很多。不过,在你进行搜索之前,必须先 SELECT 一个邮箱(IMAP 中对文件夹的称呼)。如果你想同时搜索多个文件夹,就需要建立多个 IMAP 连接,按照我的理解是这样的。IMAP4.list 可以帮助你找出邮箱的标识符。

在构建你传给 imaplib 的字符串时,参考上面链接中的“9. Formal Syntax”部分也很有帮助。

r'(\HasNoChildren) "/"' 是根邮箱 / 的一个标志。具体可以查看“7.2.6. FLAGS 响应”部分。

祝你好运!

撰写回答