Получить электронную почту, используя идентификатор сообщения с 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];
}