2010-05-09 6 views
2

J'essaie de montrer que les e-mails reçus dans les 5 dernières minutes par exemple:méthode PHP pour imap_search par date

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

est-il un moyen facile de le faire? J'ai trouvé un moyen: prenez tous les mails non vus pour la journée en cours (ex: 9 mai 2010), parcourez ces e-mails et vérifiez s'il y en a eu au cours des X dernières minutes. Si oui, faites-en l'écho (en utilisant le fichier imap_headerinfo-> udate).

Cependant, quand je regardais gmail.com un e-mail a été reçu à 17h08 et sur mon serveur, il semble que le message a été reçu à 14h08

MISE À JOUR: Je résolu le problème où il m'a montré que l'email a été envoyé à 17:04 dans gmail.com et dans mon application a montré 14:04. J'ai changé le fuseau horaire du serveur global en GMT +0 et j'ai défini le fuseau horaire de l'application. Maintenant, il me montre l'heure correctement, mais je ne sais toujours pas comment obtenir les courriels reçus au cours de la dernière période X d'une manière plus courte.

Répondre

4

Comme PHP utilise des fonctions de recherche IMAP2 qui ne permettent pas la recherche par le temps, c'est probablement la seule solution. Ou vous pouvez regarder le drapeau RECENT, mais cela nécessite encore de boucler tous les messages de la journée.

-2

j'utiliser la recherche ci-dessus:

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