Поиск…


Установка расширения IMAP

Чтобы использовать функции IMAP в PHP, вам необходимо установить расширение IMAP:

Debian / Ubuntu с PHP5

sudo apt-get install php5-imap
sudo php5enmod imap

Debian / Ubuntu с PHP7

sudo apt-get install php7.0-imap

Основанный на YUM дистрибутив

sudo yum install php-imap

Mac OS X с php5.6

brew reinstall php56 --with-imap

Подключение к почтовому ящику

Чтобы сделать что-либо с учетной записью IMAP, вам необходимо сначала подключиться к ней. Для этого вам необходимо указать некоторые требуемые параметры:

  • Имя сервера или IP-адрес почтового сервера
  • Порт, к которому вы хотите подключиться
    • IMAP - 143 или 993 (безопасный)
    • POP - 110 или 995 (безопасный)
    • SMTP - 25 или 465 (безопасный)
    • NNTP - 119 или 563 (безопасный)
  • Флаги подключения (см. Ниже)
Флаг Описание Опции По умолчанию
/service=service Какая услуга для использования imap, pop3, nntp, smtp IMAP
/user=user имя удаленного пользователя для входа на сервер
/authuser=user пользователь удаленной аутентификации; если указано, это имя пользователя, пароль которого используется (например, администратор)
/anonymous удаленный доступ как анонимный пользователь
/debug протоколировать протокольную телеметрию в журнале отладки приложения отключен
/secure не передавать пароль открытого текста по сети
/norsh не используйте rsh или ssh для установки предварительно аутентифицированного сеанса IMAP
/ssl используйте Secure Socket Layer для шифрования сеанса
/validate-cert сертификаты с сервера TLS / SSL включен
/novalidate-cert не проверяйте сертификаты с сервера TLS / SSL, если сервер использует самозаверяющие сертификаты. ИСПОЛЬЗУЙТЕ С ОСТОРОЖНОСТЬЮ отключен
/tls принудительно использовать start-TLS для шифрования сеанса и отклонять соединение с серверами, которые его не поддерживают
/notls не заставляйте start-TLS шифровать сеанс даже с серверами, которые его поддерживают
/readonly (только IMAP, игнорируется в NNTP и ошибка с SMTP и POP3)

Строка подключения будет выглядеть примерно так:

{imap.example.com:993/imap/tls/secure}

Обратите внимание, что если какой-либо из символов вашей строки соединения не является ASCII, он должен быть закодирован с помощью utf7_encode ($ string) .

Чтобы подключиться к почтовому ящику, мы используем команду imap_open, которая возвращает значение ресурса, указывающее на поток:

<?php
$mailbox = imap_open("{imap.example.com:993/imap/tls/secure}", "username", "password");
if ($mailbox === false) {
    echo "Failed to connect to server";
}

Список всех папок в почтовом ящике

Как только вы подключитесь к своему почтовому ящику, вы захотите заглянуть внутрь. Первая полезная команда - imap_list . Первым параметром является ресурс, полученный вами от imap_open , второй - строка вашего почтового ящика, а третья - строка с нечетким поиском ( * используется для соответствия любому шаблону).

$folders = imap_list($mailbox, "{imap.example.com:993/imap/tls/secure}", "*");
if ($folders === false) {
    echo "Failed to list folders in mailbox";
} else {
    print_r($folders);
}

Результат должен выглядеть примерно так

Array
(
    [0] => {imap.example.com:993/imap/tls/secure}INBOX
    [1] => {imap.example.com:993/imap/tls/secure}INBOX.Sent
    [2] => {imap.example.com:993/imap/tls/secure}INBOX.Drafts
    [3] => {imap.example.com:993/imap/tls/secure}INBOX.Junk
    [4] => {imap.example.com:993/imap/tls/secure}INBOX.Trash
)

Вы можете использовать третий параметр для фильтрации этих результатов следующим образом:

$folders = imap_list($mailbox, "{imap.example.com:993/imap/tls/secure}", "*.Sent");

И теперь результат содержит только записи с .Sent в имени:

Array
(
    [0] => {imap.example.com:993/imap/tls/secure}INBOX.Sent
)

Примечание . Использование * в качестве нечеткого поиска возвратит все совпадения рекурсивно. Если вы используете % он вернет только совпадения в указанной текущей папке.

Поиск сообщений в почтовом ящике

Вы можете вернуть список всех сообщений в почтовом ящике с помощью imap_headers .

<?php
$headers = imap_headers($mailbox);

Результатом является массив строк со следующим шаблоном:

[FLAG] [MESSAGE-ID])[DD-MM-YYY] [FROM ADDRESS] [SUBJECT TRUNCATED TO 25 CHAR] ([SIZE] chars)

Вот пример того, как каждая строка может выглядеть так:

A     1)19-Aug-2016 [email protected] Message Subject (1728 chars)
D     2)19-Aug-2016 [email protected] RE: Message Subject (22840 chars)
U     3)19-Aug-2016 [email protected] RE: RE: Message Subject (1876 chars)
N     4)19-Aug-2016 [email protected] RE: RE: RE: Message Subje (1741 chars)
Условное обозначение Флаг Имея в виду
Ответил Сообщение было отправлено
D удаленный Сообщение удаляется (но не удаляется)
F Помеченные Сообщение отмечено / смотрится для внимания
N новый Сообщение новое и не было видно
р последний Сообщение новое и было замечено
U Непрочитанный Сообщение не было прочитано
Икс Проект Сообщение - черновик

Обратите внимание: этот вызов может занять достаточно много времени и может возвращать очень большой список.

Альтернативой является загрузка отдельных сообщений по мере необходимости. Каждой электронной почте присваивается идентификатор от 1 (самый старый) до значения imap_num_msg($mailbox) .

Существует несколько функций для прямого доступа к электронной почте, но самым простым способом является использование imap_header который возвращает структурированную информацию заголовка:

<?php
$header = imap_headerinfo($mailbox , 1);

stdClass Object
(
    [date] => Wed, 19 Oct 2011 17:34:52 +0000
    [subject] => Message Subject
    [message_id] => <04b80ceedac8e74$51a8d50dd$0206600a@user1687763490>
    [references] => <[email protected]>
    [toaddress] => Some One Else <[email protected]>
    [to] => Array
        (
            [0] => stdClass Object
                (
                    [personal] => Some One Else
                    [mailbox] => someonelse
                    [host] => example.com
                )
        )
    [fromaddress] => Some One <[email protected]>
    [from] => Array
        (
            [0] => stdClass Object
                (
                    [personal] => Some One
                    [mailbox] => someone
                    [host] => example.com
                )
        )
    [reply_toaddress] => Some One <[email protected]>
    [reply_to] => Array
        (
            [0] => stdClass Object
                (
                    [personal] => Some One
                    [mailbox] => someone
                    [host] => example.com
                )
        )
    [senderaddress] => Some One <[email protected]>
    [sender] => Array
        (
            [0] => stdClass Object
                (
                    [personal] => Some One
                    [mailbox] => someone
                    [host] => example.com
                )
        )
    [Recent] =>  
    [Unseen] =>  
    [Flagged] =>  
    [Answered] =>  
    [Deleted] =>  
    [Draft] =>  
    [Msgno] =>    1
    [MailDate] => 19-Oct-2011 17:34:48 +0000
    [Size] => 1728
    [udate] => 1319038488
)


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow