Поиск…
Установка расширения 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
)