2010-05-09 5 views
2

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

$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

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

ответ

4

Поскольку PHP использует службы поиска IMAP2, которые не позволяют искать по времени, это, вероятно, единственное решение. Или вы можете посмотреть флаг RECENT, но для этого все еще требуется прокрутка всех сообщений дня.

-2

I Используйте поиск выше:

$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>"; 
}