PHP imap_搜索从日期到时间不可见

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

我使用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)');
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);