- Saved searches
- Use saved searches to filter your results more quickly
- License
- dcblogdev/imap
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
- Чтение почты через IMAP в PHP
- Получение писем
- Установка флагов
- Удаление писем
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
IMAP class for reading imap emails with PHP
License
dcblogdev/imap
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
IMAP class for reading IMAP emails with PHP
use Dcblogdev\Imap\Imap; //set search criteria $date = date('d-M-y', strtotime('1 week ago')); $term = 'ALL UNDELETED SINCE "'.$date.'"'; //ignore array of emails $exclude = []; $email = 'someone@domain.com'; $password = 'emailpassword'; $host = 'outlook.office365.com';//your email host $port = '993';//port number $savePath pl-s">emails";//folder to save attachments $markAsSeen = true;//when true mark email as been read $delete = false;//set to true to delete email //initialise email $imap = new Imap($email, $password, $host, $port, 'Inbox', $savePath, $markAsSeen, $delete); //get emails pass in the search term and exclude array $emails = $imap->emails($term, $exclude); //loop over emails and display foreach($emails as $email) < echo "Account $email['account']> "; echo "Subject $email['subject']> "; echo "From $email['fromName']> ($email['fromAddress']>) "; echo "To $email['toAddress']> "; echo "CC $email['ccAddress']> "; echo "Date $email['emailDate']> "; echo count($email['attachments'])." Attachments "; foreach($email['attachments'] as $attachment) < echo "$attachment['file']>'>$attachment['fileName']> "; > echo "
"; if ($email['htmlBody'] !='') < echo $email['htmlBody']; > else < echo nl2br($email['plainBody']); > echo " "; >
About
IMAP class for reading imap emails with PHP
Чтение почты через IMAP в PHP
В PHP без проблем можно работать с почтой через IMAP, для этого есть все необходимые функции, подробнее на php.net.
Получение писем
$imap = imap_open(«адрес», «e-mail», «пароль») – создает подключение к почтовому ящику. Далее, функция imap_search($imap, ‘ALL’) получает массив c индикаторами писем.
ALL | Все сообщения |
UNSEEN | Непрочитанные сообщения |
SEEN | Прочтенные сообщения (установлен флаг seen) |
NEW | Новые сообщения (впервые появилось в ящике в ходе текущей сессии) |
OLD | Старые сообщения |
ANSWERED | Сообщения с флагом answered (отвеченный) |
UNANSWERED | Неотвеченные сообщения |
DELETED | Удаленные сообщения |
UNDELETED | Не удаленные сообщения |
FLAGGED | Сообщения с установленным флагом flagged (важное) |
RECENT | Сообщения с флагом recent (недавнее сообщение) |
UNFLAGGED | Сообщения без установленных флагов |
ON «date» | Сообщения с датой, равной « date » |
BEFORE «date» | Сообщения с датой, до « date » |
SINCE «date» | Сообщения с датой, после « date » |
FROM «string» | Сообщения в поле From: которых присутствует «string » |
TO «string» | Сообщения в поле To: которых присутствует «string » |
SUBJECT «string» | Сообщения, у которых присутствует «string » в поле Subject |
BODY «string» | Сообщения содержащие «string » в теле |
TEXT «string» | Сообщения с текстом «string » |
KEYWORD «string» | Сообщения с ключевым словом «string» |
UNKEYWORD «string» | Сообщения, не имеющие ключевого слова «string » |
Далее массив обрабатывается в цикле, в примере происходит обход по всем письмам.
$imap = imap_open("INBOX", "mail@test.ru", "Пароль"); $mails_id = imap_search($imap, 'ALL'); foreach ($mails_id as $num) < // Заголовок письма $header = imap_header($imap, $num); var_dump($header); // Тело письма $body = imap_body($imap, $num); var_dump($body); >imap_close($imap);
$header = imap_header($imap, $num) – получает заголовки письма в виде объекта. Для удобства можно преобразовать в массив:
$header = imap_header($imap, $num); $header = json_decode(json_encode($header), true); print_r($header);
Array( [date] => Mon, 16 Sep 2019 16:03:56 +0300 [Date] => Mon, 16 Sep 2019 16:03:56 +0300 [subject] => =?UTF-8?B?SGVsbyBXb3JsZA==?= [Subject] => =?UTF-8?B?SGVsbyBXb3JsZA==?= [message_id] => [toaddress] => mail@snipp.ru [to] => Array( [0] => Array( [mailbox] => mail [host] => snipp.ru ) ) [fromaddress] => =?UTF-8?B?MTIzNDU2QHNpdGUucnU=?= [from] => Array( [0] => Array( [personal] => =?UTF-8?B?MTIzNDU2QHNpdGUucnU=?= [mailbox] => 123456 [host] => site.ru ) ) [ccaddress] => [cc] => [reply_toaddress] => [reply_to] => [senderaddress] => [sender] => [Recent] => [Unseen] => [Flagged] => [Answered] => [Deleted] => [Draft] => [Msgno] => 1 [MailDate] => 16-Sep-2019 16:03:59 +0300 [Size] => 38895 [udate] => 1568639039 )
Как видно в примере, тема письма и другие данные закодированы в base64 ( ?UTF-8?B?SGVsbyBXb3JsZA==?= ), декодировать их можно с помощью функции mb_decode_mimeheader() .
$header = imap_header($imap, $num); $header = json_decode(json_encode($header), true); echo mb_decode_mimeheader($header['subject']);
$body = imap_body($imap, $num) – тело письма, обычный текст.
Может быть закодировано в quoted-printable (= D0=94=D0=BE=D0=B1=D1=80=D1=8B=D0=B9 ), раскодировать можно функцией quoted_printable_decode() .
$body = imap_body($imap, $num); $body = quoted_printable_decode($body); echo $body;
Установка флагов
imap_setflag_full ($imap, $num, $flag) – установит письму флаг, возможны значения:
seen | Сообщение прочитано |
answered | На сообщение отправлен ответ |
flagged | Сообщение отмечено как «важное» |
deleted | Сообщение отмечено как удалённое |
draft | Сообщение отмечено как черновик |
recent | Недавнее сообщение |
Можно установить сразу несколько флагов, разделяя их пробелами.
В примере, письмам, у которых в теме письма есть слово «заявка» устанавливается флаг «важное».
$imap = imap_open("INBOX", "mail@test.ru", "Пароль"); $mails_id = imap_search($imap, 'ALL'); foreach ($mails_id as $num) < // Заголовок письма $header = imap_header($imap, $num); $header = json_decode(json_encode($header), true); $subject = mb_decode_mimeheader($header['subject']); if (mb_strpos($subject, 'заявка') !== false) < imap_setflag_full($imap, $num, '\\flagged'); >> imap_close($imap);
Удаление писем
В цикле, письмо помечается функцией imap_delete() , после этого вызывается функция imap_expunge() , которая выполняет удаление всех помеченных писем.
$imap = imap_open("INBOX", "mail@site.ru", "Пароль"); $mails_id = imap_search($imap, 'ALL'); foreach ($mails_id as $num) < $header = imap_header($imap, $num); $body = imap_body($imap, $num); // Помечаем письмо как удаленное imap_delete($imap, $num); >// Удаление помеченных писем imap_expunge($imap); imap_close($imap);