使用多个操作数进行Python imapclient搜索

时间:2018-01-17 14:11:44

标签: python search imap imapclient

我正在使用Python imapclient,我需要能够搜索多个操作数。例如,让我们说我希望看到2018年1月6日或2018年1月13日发送的消息。我已经查看了IMAP criteria with multiple ORshttps://www.limilabs.com/blog/imap-search-requires-parentheses

使用上一篇参考文献中的提示,我尝试过:

*r_data = M.search(['OR SENTON "6-Jan-2018"  SENTON "13-Jan-2018"'])
r_data = M.search('OR SENTON "6-Jan-2018"  SENTON "13-Jan-2018"')
r_data = M.search('SENTON "6-Jan-2018" OR SENTON "13-Jan-2018"')*

和其他几个人。每次我得到:

*imaplib.error: UID command error: BAD ['Command Argument Error. 11']*

我真的不必深入研究imapclient代码,以了解如何构建此请求。有没有人有任何建议?

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。发现解决方案为(基于comments in the source code):

r_data = M.search(['OR', 'SENTON', '6-Jan-2018', 'SENTON', '13-Jan-2018'])

甚至更好:

r_data = M.search(['OR', 'SENTON', date(2018, 1, 6), 'SENTON', date(2018, 1, 13)])

还适用于更复杂的查询,例如:

M.search(['OR', 'OR', 'FROM', 'a', 'FROM', 'b', 'FROM', 'c'])

答案 1 :(得分:0)

尝试使用查询生成器:

import datetime as dt
from imap_tools import AND, OR, NOT, Q, H   

# date not in the date list (NOT(date=date1 OR date=date3 OR date=date2))
q2 = NOT(OR(date=[dt.date(2019, 10, 1), dt.date(2019, 10, 10), dt.date(2019, 10, 15)]))
# "NOT ((OR OR ON 1-Oct-2019 ON 10-Oct-2019 ON 15-Oct-2019))"

imap-tools