Задать вопрос
@Dizzy221
PHP Программист

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

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

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

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


Но кажется мне что решение такое не шипко правильное и есть более адекватные способы. Кто сталкивался направьте плз.
  • Вопрос задан
  • 669 просмотров
Подписаться 1 Простой 9 комментариев
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
Melkij
@Melkij
DBA для вашего PostgreSQL?
Или я склерозник или модулем imap вы в принципе не можете что-то искать, не подключившись сначала в конкретный mailbox. То есть директорию вы знаете заведомо при подключении или можете imap_open с OP_HALFOPEN и так запросить imap_list, чтобы обходить руками список вызывая imap_reopen. Но на каждой итерации вы всё так же знаете текущий mailbox
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега PHP
Можно попробовать обойтись без массивов.
На примере gmail.
$imapPath = '{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX';
$username = 'login@gmail.com';
$password = 'password';
$inbox = imap_open($imapPath,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());

// Тут главное действие, поиск в папке "Входящие"
$emails = imap_search($inbox,'TEXT "yii"'); // найти письма с текстом "yii"
// или
$emails = imap_search($inbox,'FROM "exsample@mail.com"'); // письма с определённым адресом

Вот полный список
ALL - return all messages matching the rest of the criteria
    ANSWERED - match messages with the \\ANSWERED flag set
    BCC "string" - match messages with "string" in the Bcc: field
    BEFORE "date" - match messages with Date: before "date"
    BODY "string" - match messages with "string" in the body of the message
    CC "string" - match messages with "string" in the Cc: field
    DELETED - match deleted messages
    FLAGGED - match messages with the \\FLAGGED (sometimes referred to as Important or Urgent) flag set
    FROM "string" - match messages with "string" in the From: field
    KEYWORD "string" - match messages with "string" as a keyword
    NEW - match new messages
    OLD - match old messages
    ON "date" - match messages with Date: matching "date"
    RECENT - match messages with the \\RECENT flag set
    SEEN - match messages that have been read (the \\SEEN flag is set)
    SINCE "date" - match messages with Date: after "date"
    SUBJECT "string" - match messages with "string" in the Subject:
    TEXT "string" - match messages with text "string"
    TO "string" - match messages with "string" in the To:
    UNANSWERED - match messages that have not been answered
    UNDELETED - match messages that are not deleted
    UNFLAGGED - match messages that are not flagged
    UNKEYWORD "string" - match messages that do not have the keyword "string"
    UNSEEN - match messages which have not been read yet


p.s.
Но есть одно "НО". Не знаю как с другими почтовиками, но в gmail необходимо разрешить доступ для непроверенных приложений и подтвердить свой выбор через письмо, которое присылается на Ваш ящик автоматически.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽