PHP imap_search не обнаруживает все сообщения в почтовом ящике Gmail - PullRequest
6 голосов
/ 06 января 2011

Когда я запускаю очень простую imap_search в своей папке входящих сообщений GMail, поиск возвращает меньше сообщений, чем следовало бы.

Вот скрипт, который может запустить любой пользователь с учетной записью GMail.

$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);

Это возвращает 39 сообщений.Но у меня есть 100 сообщений в моем почтовом ящике, некоторые из них связаны между собой, некоторые пересылаются из другой учетной записи (SquirrelMail).

Может кто-нибудь дублировать эти результаты и / или сказать мне, что происходит?


Другие серверные строки, которые я пробовал, все возвращают одинаковые результаты:

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

Поддержка IMAP в GMail: http://mail.google.com/support/bin/answer.py?hl=en&answer=78761

Ответы [ 2 ]

8 голосов
/ 07 января 2011

После значительного выпадения волос я нашел ответ.Это был вводящий в заблуждение пользовательский интерфейс.

GMail по умолчанию группирует свои сообщения в «Беседы».Эти разговоры могут включать в себя архивные сообщения.

Так, например, входящие сообщения Боба выглядят так: есть 4 разговора по 25 сообщений, которые, очевидно, должны возвращать 100 сообщений входящих.На самом деле, 60 сообщений находятся в архиве (не во входящих), поэтому imap_search() возвращает 40.Эти сообщения волшебным образом извлекаются из архива и помещаются в диалоги входящих сообщений.

В меню Настройки-> Общие вы можете переключить вид беседы, в котором будут помещены все эти непослушные заархивированные сообщения.вернитесь туда, где они должны быть, и покажите свое истинное представление входящих сообщений.

0 голосов
/ 06 января 2011

критерии imap_search ALL - вернуть все сообщения, соответствующие остальным критериям, поэтому я спрашиваю вас, где остальные критерии?

Вы можете использовать imap_sort($imapStream, 'SORTDATE', 0); (imap_sort - получает и сортирует номера сообщений позаданные параметры imap_sort ).


Редактировать, вот код, который проходит через все сообщения в вашем почтовом ящике, вместо imap_num_msg, вы можете использовать imap_sort, как указано вышетак что вы получите, что вы отсортированы во входящих, если хотите.

<?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);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...