Я никогда не использовал функции imap, но, просматривая руководство, проблема может заключаться в том, что ваша функция imap_search возвращает простые порядковые номера сообщений вместо UID, которые, как я предполагаю, уникальные идентификаторы сообщений?
Может быть, кто-то может помочь вам лучше, я просто делаю снимок, чтобы попробовать несколько вещей.
Попробуйте изменить функцию imap_search на это:
$emails = imap_search($conn,'FROM "'.$findemail.'"', SE_UID);
И ваши функции выборки для них:
$overview = imap_fetch_overview($conn,$email_number, FT_UID);
$message = imap_fetchbody($conn,$email_number,2, FT_UID);
Если это не сработает, вы можете попробовать просто установить fetch_overview для одного из них:
$overview = imap_fetch_overview($conn,"1:{$email_number}",0);
// Or Maybe:
$overview = imap_fetch_overview($conn,"{$email_number}:{$email_number}",0);
Что говорит о необходимости получать сообщения от 1 до, как мне кажется, $ email_number, последовательности идентификаторов сообщений, а не уникальных идентификаторов сообщений. Хотя не уверен.
Я не думаю, что rsort () будет работать с использованием метода UID, поэтому вам пришлось бы искать другой способ их сортировки, если бы вы использовали этот метод. Возможно, вам придется получить массив всех заголовков соответствующих писем и отсортировать их таким образом.
Извините, я больше не помог, никогда раньше не использовал imap, но удачи!
Редактировать: справочные страницы очень странные для этого, но похоже, что функция imap_sort также имеет критерии поиска, поэтому теоретически вы можете сделать:
$emails = imap_sort($conn, SORTARRIVAL, 0, SE_UID, 'FROM "'.$findemail.'"');
// and then grab the first one:
$emails = array_slice($emails,0,1);
//And then further down use these two with the UID param
$overview = imap_fetch_overview($conn,$email_number, FT_UID);
$message = imap_fetchbody($conn,$email_number,2, FT_UID);
Если вы все еще не получаете сообщения из своего архива, вы можете посмотреть на этот ответ:
PHP imap_search не обнаруживает все сообщения в почтовом ящике Gmail
Редактировать снова
Ничего себе, это действительно больше, чем я думал ... Это превращается в самый длинный ответ за всю историю ...
В зависимости от ваших требований, если вам когда-либо нужно будет найти сообщения в папке архива, я считаю, что вам нужно заново открыть соединение и подключиться к этой конкретной папке перед поиском, что-то вроде:
imap_reopen($conn, "{$gmailhostname}Archive") or die(implode(", ", imap_errors()));
//You can find out what folders are available with this command:
print_r(imap_list($conn, $gmailhostname, '*'));
Если вам нужно найти все ваши папки ... Это сложнее из того, что я видел:
Вам либо нужно перебрать каждый почтовый ящик, который вы хотите найти, либо найти способ использовать это:
http://code.google.com/apis/gmail/imap/#x-gm-raw
Думаю, вам понадобится пользовательский обработчик imap или ZEND.
Пользовательская команда IMAP в php
Это официально вся информация, которую я смог найти.