Извлеките lastContactDate из заданного адреса электронной почты из моей учетной записи gmail. Надеясь ответить на вопрос: "Когда в последний раз я связался с [Лицом]"
Ответ 1
Проблема решена!
Здесь решение. Используя исходный код выше, мы только изменили местоположение, в котором находится наша программа. Вместо INBOX это:
/* connect to gmail */
$gmailhostname = '{imap.gmail.com:993/imap/ssl}[Gmail]/All Mail';
В частности
[Gmail]/All Mail
Найден синтаксис здесь: http://php.net/manual/en/function.imap-delete.php
Но не было бы возможно без решения Ben epic ниже.. В значительной степени для этого бит:
//You can find out what folders are available with this command:
print_r(imap_list($conn, $gmailhostname, '*'));
print_r перечислены все папки в моей учетной записи по имени. Мы заметили "All Mail", в моем случае - 22 000+, нашли образец кода на php.net с синтаксисом, подключили его и альта!
Благодаря mmmshuddup для очистки моего кода и особенно Ben для огромных усилий по исследованию и ведущих решений.
Это весело, как ад.
Ответ 2
Я никогда не использовал функции 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 до, независимо от того, какой тип $mail_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
Это официальная информация, которую я мог найти.