使用 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 搜索之前/之后的主要内容,如果未能解决你的问题,请参考以下文章

Python imaplib 使用日期和时间搜索电子邮件

具有多个条件的python imaplib搜索

Imaplib 中的 EOF 错误

使用 imaplib 阅读电子邮件 - “超过 10000 字节”错误

使用imaplib下载多个附件

如何使用 imaplib 创建电子邮件并将其发送到特定邮箱