我在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
中执行那种OR语句。如果有人能够快速解释错误或指出我正确的方向,那将非常感激。
答案 0 :(得分:17)
您收到的错误是从服务器生成的,因为它无法正确解析搜索查询。为了生成有效的查询,请按照RFC 3501进行操作,在第49页中详细说明了结构。
例如,您的搜索字符串应该是:
'(OR (TO "tech163@fusionswift.com") (FROM "tech163@fusionswift.com"))'
答案 1 :(得分:1)
尝试使用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_='from@ya.ru', text='"the text"'), NOT(OR(Q(answered=False), Q(new=True))), to='to@ya.ru')
您当然可以使用所有库工具