8

我将它与 Gmail 的 SMTP 服务器一起使用,我想通过 IMAP 搜索发送到某个地址或从某个地址接收的电子邮件。

这就是我所拥有的:

mail = imaplib.IMAP4_SSL('imap.gmail.com')

mail.login('user', 'pass')
mail.list()
mail.select("[Gmail]/All Mail")

status, email_ids = mail.search(None, 'TO "tech163@fusionswift.com" OR FROM "tech163@fusionswift.com"')

错误的最后一行是:imaplib.error: SEARCH command error: BAD ['Could not parse command']

不知道我应该如何在 python 的imaplib. 如果有人可以快速解释问题所在或指出我正确的方向,将不胜感激。

4

2 回答 2

23

您收到的错误是从服务器生成的,因为它无法正确解析搜索查询。为了生成有效的查询,请遵循RFC 3501,在第 49 页中详细解释了该结构。

例如,您要正确的搜索字符串应该是:

'(OR (TO "tech163@fusionswift.com") (FROM "tech163@fusionswift.com"))'
于 2012-05-12T11:38:47.320 回答
1

尝试使用来自https://github.com/ikvk/imap_tools的 IMAP 查询生成器

from imap_tools import A, AND, OR, NOT
# AND
A(text='hello', new=True)  # '(TEXT "hello" NEW)'
# OR
OR(text='hello', date=datetime.date(2000, 3, 15))  # '(OR TEXT "hello" ON 15-Mar-2000)'
# NOT
NOT(text='hello', new=True)  # 'NOT (TEXT "hello" NEW)'
# complex
A(OR(from_='from@ya.ru', text='"the text"'), NOT(OR(A(answered=False), A(new=True))), to='to@ya.ru')

当然你可以使用所有的库工具

于 2020-04-11T12:23:02.553 回答