@Dizzy221
PHP Программист

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

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

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

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


Но кажется мне что решение такое не шипко правильное и есть более адекватные способы. Кто сталкивался направьте плз.
  • Вопрос задан
  • 631 просмотр
Пригласить эксперта
Ответы на вопрос 2
Melkij
@Melkij
PostgreSQL DBA
Или я склерозник или модулем 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 необходимо разрешить доступ для непроверенных приложений и подтвердить свой выбор через письмо, которое присылается на Ваш ящик автоматически.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы