按日期的imap_search的PHP方法

时间:2010-05-09 15:54:02

标签: php gmail imap

我只想显示过去5分钟内收到的电子邮件,例如:

$since = date('d-M-Y G\:i', time() - 300); // current time - 5 min
$mb = imap_search ($m_mail, 'UNSEEN SINCE ' . $since . '');

有一种简单的方法吗?我找到了一种方法:获取当天所有看不见的邮件(例如:2010年5月9日),循环浏览这些电子邮件,然后检查是否在最后X分钟内发送了任何邮件。如果是这样的话(使用imap_headerinfo-> udate)。

然而,当我查看gmail.com时,我在17:08收到了一封电子邮件,并且在我的服务器上显示该电子邮件是在14:08收到的

更新:我解决了这个问题,它告诉我电子邮件是在gmail.com 17:04发送的,而我的应用程序显示的是14:04。我将全局服务器时区更改为GMT +0并设置应用程序时区。现在它正确显示了我的时间,但我仍然不知道如何以较短的方式收到过去X时间内收到的电子邮件。

2 个答案:

答案 0 :(得分:4)

由于PHP使用不允许按时间搜索的IMAP2搜索工具,这可能是唯一的解决方案。或者您可以查看RECENT标志,但仍需要循环播放当天的所有消息。

答案 1 :(得分:-2)

我使用上面的搜索:

$mailbox = imap_open($str_conexao, $login, $senha) or die("Can't connect: " . imap_last_error());

echo $since = date("D, d M Y", strtotime("-1 days"));

$search = imap_search($mailbox, 'FROM "somebody@exemple.com" SINCE "'.$since.' 00:00:00 -0700 (PDT)"', SE_UID);
echo "<PRE>";
  var_dump($search);
echo "</PRE>";
foreach ($search as $msg_id)
{
    //Pega informações da mensagem
    $overview = imap_fetch_overview($mailbox, $msg_id, FT_UID);
    echo "<PRE>";
     var_dump($overview);
    echo "</PRE>";
}