PHP-метод для поиска imap по дате


Я пытаюсь показать только электронные письма, полученные за последние 5 минут, например:

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

Есть ли простой способ сделать это? Я нашел способ: возьмите все невидимые письма за текущий день (например, 9 мая 2010 года), просмотрите эти письма, а затем проверьте, были ли они отправлены за последние X минут. Если это так, повторите его (используя imap_headerinfo->udate).

Однако, когда я посмотрел на gmail.com одно электронное письмо было получено в 17:08, и на моем сервере похоже, что электронное письмо было получено в 14:08

ОБНОВЛЕНИЕ: Я решил проблему, когда мне показали, что электронное письмо было отправлено в 17:04 в gmail.com а в моем приложении показывали 14:04. Я изменил часовой пояс глобального сервера на GMT +0 и установил часовой пояс приложения. Теперь он показывает мне время правильно, но я все еще не знаю, как получить электронные письма, полученные за последний X промежуток времени, более коротким способом.

Author: usumoio, 2010-05-09

2 answers

Поскольку PHP использует средства поиска IMAP2, которые не позволяют выполнять поиск по времени, это, вероятно, единственное решение. Или вы можете посмотреть на НЕДАВНИЙ флаг, но для этого все равно требуется просмотреть все сообщения за день.

 4
Author: andr, 2010-05-09 16:23:46

Я использую поиск выше:

$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 "[email protected]" 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>";
}
 -2
Author: user3738820, 2014-06-13 18:57:45