Python IMAP 邮件按分钟搜索

3 投票
2 回答
4495 浏览
提问于 2025-04-17 22:13

我正在尝试通过python的imaplib来搜索“10分钟前”的邮件。我可以用任何字符串来搜索邮件,但就是无法按日期搜索。

result, data = mail.uid('search', None, '(HEADER Subject "SEARCH_TERM")')

我该如何按分钟来搜索呢?

2 个回答

0

基础的IMAP协议不支持这个功能。不过,有一个扩展叫做 WITHIN,可以实现这个功能,但它的支持情况并不稳定。你可以检查一下你的服务器是否支持WITHIN。如果不支持,那你就只能自己查找今天的邮件,获取日期字段或者INTERNALDATE,然后自己进行调整。

7

SEARCH命令(比如SENTSINCE、SINCE、SENTBEFORE、SENTON、BEFORE)只能用日期来搜索,而不能用日期加时间戳。这意味着你只能使用格式为DD-MMM-YYYY的日期,不能包含小时、分钟或秒,只能写日期。

比如:可以这样写:a1 search since "01-mar-2014"

但不能这样写:a1 search since "01-mar-2014 00:00:00"

如果你写成:1 search since "01-mar-2014"

  • SEARCH 498 499 500

而如果你写成:1 search since "01-mar-2014 00:00:00"

你会收到一个错误提示:1 BAD Error in IMAP command SEARCH: Invalid search date parameter

所以,你需要查看搜索返回的每个消息的编号,然后在你的代码中进行时间戳的过滤。例如:

1 fetch 498:500 internaldate

  • 498 FETCH (INTERNALDATE "04-Mar-2014 13:07:29 -0600")

  • 499 FETCH (INTERNALDATE "05-Mar-2014 07:16:43 -0600")

  • 500 FETCH (INTERNALDATE "05-Mar-2014 07:44:36 -0600")

或者如果你想用日期的话,可以这样写:fetch 498:500 (body.peek[header.fields (Date)])。

-Rick

撰写回答