从或到指定电子邮件地址的Python IMAP搜索

问题描述 投票:7回答:2

我正在与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 "[email protected]" OR FROM "[email protected]"')

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

不确定我应该如何在python的imaplib中执行这种OR语句。如果有人可以快速解释出什么问题或向正确的方向指点,我们将不胜感激。

python imap imaplib
2个回答
18
投票

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

例如,正确的搜索字符串应为:

'(OR (TO "[email protected]") (FROM "[email protected]"))'

0
投票

[尝试使用https://github.com/ikvk/imap_tools中的IMAP查询构建器

from imap_tools import Q, AND, OR, NOT
# AND
Q(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
Q(OR(from_='[email protected]', text='"the text"'), NOT(OR(Q(answered=False), Q(new=True))), to='[email protected]')

当然可以使用所有库工具

© www.soinside.com 2019 - 2024. All rights reserved.