Как получить папку письма IMAP?

95
11 апреля 2021, 17:00

Собственно интересуют входящие сообщения, которые не попали ни в одну папку и лежат в корневой INBOX. Смотрел заголовки и тело письма, там нет ни одного упоминания о том в какой папке находится письмо.

Вижу пока только такой вариант:

  • По отдельности получаем письма за N период из всех папок и записываем их в массив
  • Читаем все входящие письма за N период и записываем их в массив
  • Удаляем элементы из массива со всеми входящими? которые попали в первый массив

Но кажется мне что решение такое не шипко правильное и есть более адекватные способы. Кто сталкивался направьте плз.

Answer 1

Если вы будете получать письма так (стандартный способ):

$server = '{imap.yandex.ru:993/ssl}';

$mbox = imap_open($server, "Login", 'pass')
     or die("не удалось подключиться: " . imap_last_error());
$MC = imap_check($mbox);

$result = imap_fetch_overview($mbox,"1:{$MC->Nmsgs}",0);
foreach ($result as $overview) {
    echo "#{$overview->msgno} ({$overview->date}) - From: {$overview->from}
    {$overview->subject}\n";
}
imap_close($mbox);

ТО вы ВСЕГДА будете получать письма из папки INBOX. То есть письма без папки.

А если вам надо получить письма конкретно из папки:

$server = '{imap.yandex.ru:993/ssl}';
$connection = imap_open($server, "login", 'pass');
$mailboxes = imap_list($connection, $server, '*');
print_r( $mailboxes );

Вы должны получить что-то типо такого:

Array
(
    [0] => {imap.yandex.ru:993/ssl}Входящие
    [1] => {imap.yandex.ru:993/ssl}PHP
    [2] => {imap.yandex.ru:993/ssl}Servers
)

Название могут быть на кирилице, нужно будет декодировать. Теперь например нам нужно взять письма из папки PHP, то делаем переподключение:

imap_reopen($connection, $server.'PHP');

И уже делаем запрос для получения писем.

Всё это я проверял на яндексе, mail, google. Везде нормально.

READ ALSO
Выбор точки реализации метода в связных данных

Выбор точки реализации метода в связных данных

Есть связные данные многие-многие, многие-один1) Многие-один

114
Как сделать класс модера php

Как сделать класс модера php

Заказал сайт, в нем есть файл класса админ, я не профи и не знаю как сделать класс модераРешил просто вырезать некоторые функции админа, вот...

113
Входит ли дата во временной интервал?

Входит ли дата во временной интервал?

Имеется дата 2019-07-01 16:22:01

100
Ограничить вывод внутренних ссылок из файла

Ограничить вывод внутренних ссылок из файла

Есть вот такой небольшой код на странице новости:

120