使用Python的imaplib进行前后搜索

15 投票
2 回答
29260 浏览
提问于 2025-04-16 15:29

我写了一个小的IMAP脚本,用Python(3.2)编写。

我的搜索语句看起来是这样的:

typ, data = M.search(None, 'FROM', '"MyName"')

我得到了预期的结果。不过,如果我把它改成这样:

typ, data = M.search(None, 'AFTER', '"01-Jan-2010"')

(无论是否加上引号的日期,我都会收到这个错误

Traceback (most recent call last):
  File "./priv/imap.py", line 100, in <module>
    main()
  File "./priv/imap.py", line 93, in main
    print(to_json(fetch_result(M, args), args))
  File "./priv/imap.py", line 51, in fetch_result
    typ, data = M.search(None, 'AFTER', '"01-Jan-2010"')
  File "/usr/lib/python3.2/imaplib.py", line 652, in search
    typ, dat = self._simple_command(name, *criteria)
  File "/usr/lib/python3.2/imaplib.py", line 1121, in _simple_command
    return self._command_complete(name, self._command(name, *args))
  File "/usr/lib/python3.2/imaplib.py", line 957, in _command_complete
    raise self.error('%s command error: %s %s' % (name, typ, data))
imaplib.error: SEARCH command error: BAD [b'Could not parse command']

我不知道为什么这样会被认为是非法的,但任何帮助都非常感谢!另外,我最终想做的是使用“YOUNGER 1234567”来进行更细致的筛选,但我不确定gmail/python是否支持这个功能。

提前谢谢大家!

2 个回答

7

你可以试试:

typ, data = M.search(None, '(SINCE "01-Jan-2010")')

或者如果你在使用UID的话:

typ, data = M.uid('search', '(SINCE 01-Jan-2010)')
22

你可以使用这样的搜索方式:

不过似乎它不支持具体的时间,只能按日期来搜索。

而这个日期是邮件的内部日期(不考虑时间和时区)。

M.search(None, '(SINCE "01-Jan-2012")')
M.search(None, '(BEFORE "01-Jan-2012")')
M.search(None, '(SINCE "01-Jan-2012" BEFORE "02-Jan-2012")')

撰写回答