2011-01-06 8 views
6

Wenn ich eine sehr einfache imap_search auf meinem Google Mail-Posteingang ausführen, gibt die Suche weniger Nachrichten als es sollte.PHP imap_search nicht alle Nachrichten in Gmail Posteingang

Hier ist das Skript, das jeder mit einem Google Mail-Konto ausführen kann.

$host = '{imap.gmail.com:993/imap/ssl}'; 
$user = 'foo'; 
$pass = 'bar'; 

$imapStream = imap_open($host,$user,$pass) or die(imap_last_error()); 

$messages = imap_search($imapStream,"ALL"); 

echo count($messages); 

imap_close($imapStream); 

Dies gibt 39 Nachrichten zurück. Aber ich habe 100 Nachrichten in meinem Posteingang, einige in Konversationen, einige von einem anderen Konto (SquirrelMail).

Kann jemand diese Ergebnisse duplizieren und/oder mir sagen, was vor sich geht?


Andere Server Strings Ich habe versucht, Rückkehr, die alle die gleichen Ergebnisse:

{imap.gmail.com:993/imap/ssl/novalidate-cert} 
{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX 
{imap.gmail.com:993/imap/ssl}INBOX 

Unterstützung GMail IMAP-Funktion: http://mail.google.com/support/bin/answer.py?hl=en&answer=78761

+0

Versuchte 'imap_sort',' imap_num_msg' und 'imap_search', gleiche Ergebnisse. – Ben

+0

Versuchte "Erweiterte IMAP-Kontrollen" in Google Labs, gleiche Ergebnisse. – Ben

Antwort

8

Nach signifikanten Haarausfall habe ich die Antwort gefunden. Es war eine irreführende Benutzeroberfläche.

GMail gruppiert die Nachrichten standardmäßig in "Conversations". Diese Konversationen können archivierte Nachrichten enthalten.

So, zum Beispiel, Bobs Posteingang sieht aus wie gibt es 4 Gespräche von 25 Nachrichten, die anscheinend 100 Posteingang Nachrichten zurückgeben sollte. In Wirklichkeit befinden sich 60 der Nachrichten im Archiv (nicht im Posteingang), so dass imap_search()40 zurückgibt. Diese Nachrichten werden auf magische Weise aus dem Archiv entfernt und in Posteingang-Konversationen abgelegt.

Im Menü Einstellungen-> Allgemein können Sie die Konversationsansicht umschalten, die all diese ungeordneten archivierten Nachrichten dorthin zurückversetzt, wo sie hingehören, und Ihre wahre Ansicht des Posteingangs anzeigen.

+0

'Nach signifikanten Haarausfall' LOL ... das gleiche hier – Umair

0

imap_search Kriterien ALL - Rückkehr alle Nachrichten den Rest der Anpassung Kriterien, also frage ich Sie, wo ist der Rest der Kriterien?

Sie könnten verwenden imap_sort($imapStream, 'SORTDATE', 0); (imap_sort - Gets und sortiert Nachrichtennummern durch die angegebenen Parameter imap_sort).


Bearbeiten, hier ist ein Code, der, statt imap_num_msg durch alle Nachrichten in Sie sind Posteingang geht, die Sie vor, wie angegeben verwenden imap_sort könnte, so dass Sie Sie sortiert sind Posteingang, wenn Sie mögen.

<?php 
    $imap = imap_open("{mail.yourserver.com:143}INBOX", "username", "password"); 
    $message_count = imap_num_msg($imap); 

    for ($i = 1; $i <= $message_count; ++$i) { 
     $header = imap_header($imap, $i); 
     $body = trim(substr(imap_body($imap, $i), 0, 100)); 
     $prettydate = date("jS F Y", $header->udate); 

     if (isset($header->from[0]->personal)) { 
      $personal = $header->from[0]->personal; 
     } else { 
      $personal = $header->from[0]->mailbox; 
     } 

     $email = "$personal <{$header->from[0]->mailbox}@{$header->from[0]->host}>"; 
     echo "On $prettydate, $email said \"$body\".\n"; 
    } 

    imap_close($imap); 
?> 
+0

@poelinca - "ALL" ist das Kriterium, ich möchte alle Nachrichten im Posteingang. Ich habe gerade jetzt 'imap_sort' ausprobiert, und es kam zu denselben Ergebnissen. :/ – Ben

+0

siehe bitte meine update antwort, schau auf php.net ALLE sollten nicht alleine benutzt werden, das würde bedeuten, dass du ANY als eigenständiges Kriterium benutzen könntest, wer arbeitet es? –

+0

@poelinca - 'ALLE' selbst liefert die gleichen Ergebnisse wie wenn ich es mit Kriterien aufspalte. Haben Sie eine Quelle, wenn Sie sagen "sollte nicht allein verwendet werden"? ANY funktioniert auch nicht, weil es nicht in der Kriterienliste steht. – Ben

Verwandte Themen