PHP imap_搜索从日期到时间不可见
我使用PHP imap_search获取给定日期以来未看到的消息列表,如下所示:PHP imap_搜索从日期到时间不可见,php,datetime,imap,Php,Datetime,Imap,我使用PHP imap_search获取给定日期以来未看到的消息列表,如下所示: imap_search($stream, 'UNSEEN SINCE 20-Sep-2015'); 这很好用。但是,我每隔几分钟定期检查一次新电子邮件,然后将上次检查时间存储在会话中。我希望能够使用未查看的自日期(包括时间)运行imap_搜索。但它似乎不起作用。我试过: imap_search($stream, 'UNSEEN SINCE 20-Sep-2015 12:35:03 +0000 (UTC)'); i
imap_search($stream, 'UNSEEN SINCE 20-Sep-2015');
这很好用。但是,我每隔几分钟定期检查一次新电子邮件,然后将上次检查时间存储在会话中。我希望能够使用未查看的自日期(包括时间)运行imap_搜索。但它似乎不起作用。我试过:
imap_search($stream, 'UNSEEN SINCE 20-Sep-2015 12:35:03 +0000 (UTC)');
imap_search($stream, 'UNSEEN SINCE 20-Sep-2015 12:35:03 +0000');
imap_search($stream, 'UNSEEN SINCE 20-Sep-2015 12:35:03');
似乎什么都不管用。如果可以的话,你有什么想法吗?看看
的定义,因为在:
因此,您不能使用,因为可以根据比一天更具体的时间搜索消息
另一种方法是记住您看到的最新消息的UID,然后搜索上面的消息:
imap_search($stream, 'UID ' . $latest_uid . ':*', SE_UID);
需要使用SE_UID
选项进行imap_搜索
返回UID而不是消息序列号
要首先获取最新邮件的UID,请搜索*
,它表示邮箱中编号最高的邮件:
imap_search($stream, 'UID *', SE_UID);
我认为使用php和IMAP协议是不可能的。看起来IMAP在rfc中定义了一个搜索内扩展,但php似乎还没有这个标准。另外,在执行搜索操作时,因为条件(基本上是IMAP协议中的所有datetime条件)忽略了时间和时区。
一种解决方法是使用当前查询获取电子邮件,然后获取内部日期,并使用php datetime函数实现过滤函数。
希望这有帮助。
有关IMAP的更多信息:使用“自”无法实现这一点
另一种方法是记住你看到的最新消息的UID,然后搜索上面的消息:(感谢@legossia)
据
无效,它不工作。
使用
此处*指的是最新的邮件UID。
这将返回一个对象数组,您可以从中提取电子邮件的UID。您可以使用循环分别创建UID数组。
正如在上所回答的,这只是一个简单的问题@Legossia。如果删除$latest\u uid消息,会发生什么情况?这种方法仍然有效吗?它仍然有效。IMAP服务器将跳过丢失的UID并返回现有UID,直到邮箱中的最新邮件。请注意,*
始终表示编号最高的邮件,因此,如果删除了$latest\u uid
,但未添加任何邮件,这将返回仍然存在的最新邮件。还有一个简单的问题:如何从上次收到的电子邮件中检索此$latest\u uid?@GabrielAugusto我更新了答案,将其包括在内。谢谢。但是使用UID的imap_搜索始终返回false。有什么建议吗?即使我用像1这样的ID替换$lastest\u uid,它也不起作用。只返回false。
imap_search($stream, 'UID ' . $latest_uid . ':*', SE_UID);
imap_search($stream, 'UID *', SE_UID);
$emails = imap_search($inbox, "UID 1:*", SE_UID);
$emails = imap_fetch_overview($inbox, "$latest_uid:*", FT_UID);