Получить электронную почту, используя идентификатор сообщения с php imap?

Я занимаюсь разработкой небольшого веб-почтового приложения, и мне нужно сделать так, чтобы поток писем соответствовал тому, что делает Gmail.

Я планировал добиться этого, получивreferences'почты (используя uid), а затем показывает их как одну нить. Я получаю ссылки, как это:

    $inbox = imap_open("{imap.example.org:143}INBOX", "username", "password");
    $email_number = imap_msgno($inbox,$uid);
    $overview = imap_fetch_overview($inbox,$email_number,0);
    $mess = $overview[0];
    $refs = array_filter(explode(' ', htmlentities($mess->references)));

$refs массив является массивом Message-Id's Может кто-нибудь сказать мне, как получить почту на основе Message-Id,

Если я могу получить Message UID или же Message Sequence Number из Message-Id этого также будет достаточно.

Альтернативой, которая пришла мне в голову, было добиться этого, используя imap_search() для поиска писем с той же темой (после удаления 'Re:' из него и т. д.), но я не думаю, что это было бы идеально.

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

2 ответа

Некоторые IMAP-серверы позволяют выполнять поиск по Message-ID (SEARCH HEADER Message-ID string), но многие серверные программы, похоже, плохо это реализуют.

Как правило, нет способа извлечь сообщение по заголовку Message-ID. Большинство клиентов загружают заголовки (включая идентификатор сообщения) всех сообщений, сохраняют их, а затем обрабатывают их, сопоставляя их с другими сообщениями на основе References а также In-Reply-To заголовки. Однако: если вы используете Gmail, вы можете использовать его расширения, чтобы получить внутренний идентификатор потока Gmail, который они называют X-GM-THRID,

Это сработало для меня:

      $result = imap_search($imapResource, "TEXT \"<mymessageid@host.com>\"", SE_UID);
if(is_array($result) && count($result) == 1){
    echo $result[0];
}
Другие вопросы по тегам