使用 Pythons imaplib 搜索之前/之后
Posted
技术标签:
【中文标题】使用 Pythons imaplib 搜索之前/之后【英文标题】:SEARCH BEFORE/AFTER with Pythons imaplib 【发布时间】:2011-08-03 01:00:47 【问题描述】:我有一个用 Python(3.2) 编写的较小的 IMAP 脚本。
我的搜索行如下所示:
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 是否支持这一点。
提前致谢
【问题讨论】:
【参考方案1】:您可以像这样使用搜索:
但好像不支持详细时间,只支持日期。
并且日期是电子邮件的内部日期(不考虑时间和时区)
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")')
【讨论】:
括号没有伤害,但我确实发现它们是不必要的,至少在 gmail 上是这样。 某些情况下需要括号 在某些情况下,甚至很多情况下都需要括号,但从来没有因为/之前,因为日期格式仅使用 az、0-9 和 -,并且这些都不需要引用。跨度> 如果我可以在这里给你 10 票,我会的。缺乏 python 文档使这变得困难。你拯救了这一天!【参考方案2】:你可以试试:
typ, data = M.search(None, '(SINCE "01-Jan-2010")')
或者如果您使用的是 UID:
typ, data = M.uid('search', '(SINCE 01-Jan-2010)')
【讨论】:
是否可以同时使用时间和日期? @user250145 不,这些命令是“不考虑时间和时区”完成的:tools.ietf.org/html/rfc3501.html#section-6.4.4以上是关于使用 Pythons imaplib 搜索之前/之后的主要内容,如果未能解决你的问题,请参考以下文章