Php класс для imap

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);

Источник

Читайте также:  Multi threading in python
Оцените статью