Python IMAP 邮件按分钟搜索
我正在尝试通过python的imaplib来搜索“10分钟前”的邮件。我可以用任何字符串来搜索邮件,但就是无法按日期搜索。
result, data = mail.uid('search', None, '(HEADER Subject "SEARCH_TERM")')
我该如何按分钟来搜索呢?
2 个回答
基础的IMAP协议不支持这个功能。不过,有一个扩展叫做 WITHIN,可以实现这个功能,但它的支持情况并不稳定。你可以检查一下你的服务器是否支持WITHIN。如果不支持,那你就只能自己查找今天的邮件,获取日期字段或者INTERNALDATE,然后自己进行调整。
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