Обзор Advanced Email Parcer - программы для автоматизации обработки электронной почты. Вытаскиваем письма из почты. Работаем с протоколом IMAP


Каждый, кто пользуется электронной почтой (а таких среди пользователей Интернета большинство), старается разместить входящие сообщения таким образом, чтобы с ними было удобно работать, чтобы можно было быстрее и проще находить нужные. Для этого в почтовом ящике создаются дополнительные папки и в зависимости от используемого почтового клиента тем или иным образом выполняется сортировка входящих писем. Чаще всего обработка ведется по почтовым адресам, по рассылкам, на которые подписан пользователь. Возможна сортировка по теме сообщения, ключевым словам. Но выполняется все это в почтовых программах.

А вот компания "Твик Маркетинг" предлагает использовать подобную же схему, но расширив возможности ее применения. В решении Advanced Email Parcer (AEP) обработка входящей корреспонденции выполняется вне почтового клиента, а за счет использования элементов ActiveX появилась возможность интеграции программы с любыми программами, поддерживающими эту технологию. Интеграция осуществляется с помощью скриптовых языков на основе технологии Microsoft Active Scripting. Возможно использование большинства скриптовых языков, в том числе JScript и VBScript.

С помощью этой программы можно автоматизировать некоторые рутинные операции. К примеру, можно автоматизировать:

  • обработку форм заказов и анкет, присланных по электронной почте;
  • заполнение баз данных заказов;
  • сортировку и перенаправление потоков почтовых сообщений;
  • составление списков рассылок, ведение разнообразной статистики;
  • создание служб автоматических ответов, почтовых роботов;
  • резервное копирование важных почтовых сообщений.

Программа может работать в двух основных режимах - режиме посредника, когда AEP выступает в качестве промежуточного обработчика на стыке почтового сервера и клиента, и в режиме сборщика, при котором программа самостоятельно подключается к почтовому серверу и в зависимости от настроек учетной записи обрабатывает сообщения и удаляет или оставляет их на сервере (в зависимости от настроек учетной записи). При подключении в качестве посредника выполняется перенастройка подключения почтового клиента. Новая настройка подобна настройке при работе со спам-фильтрами, когда клиент подключается не к серверу, а к промежуточному обработчику. (Интересно, а как в этом случае устанавливать и парсер, и спам-фильтр?)

Поступившие в AEP сообщения обрабатываются с помощью списка правил, сформированных из фильтров и компонентов обработки. Фильтры выполняются последовательно и определяют, подлежит сообщение обработке или нет. Те сообщения, которые подпадают под одно из правил, размещаются в очереди, обработка которой начинается после загрузки всех новых сообщений с почтового сервера. Результаты обработки можно в дальнейшем просмотреть в журнале, в который записываются все события.

Компоненты обработки обеспечивают извлечение, изменение и сохранение определенных данных из сообщений. В процессе обработки возможны сохранение данных во внешних файлах, передача в иные программы, обработка с помощью скриптов, изменение с помощью шаблонов. Для формирования правил и компонент используется специальный конструктор, обеспечивающий также выполнение отладки на основе тестовых данных (их можно сформировать в виде файла или выполнить отладку на входящих сообщениях).

Последовательность формирования правил весьма подробно показана на сайте разработчика в виде онлайнового тура. Жаль, что он не включен в состав документации, тогда с ней работать было бы намного проще и освоить настройку было бы легче. Тем не менее рассмотрим, как формируются правила.

К примеру, как сформировать список рассылки на основе входящих сообщений. Создадим новое правило, дадим ему название. Первое, что необходимо будет сделать, - обработать входящее сообщение. Будем считать, что в список рассылки попадают только те респонденты, от которых пришло письмо с определенным заголовком. Поэтому первый фильтр надо будет настроить на отбор писем с таким заголовком. Добавим в правило фильтр (Subject Filter) и в свойствах, в поле Contains, добавим требуемую тему.

Из тех сообщений, которые будут отобраны этим фильтром, необходимо выделить имя и адрес отправителя. Для этого используем функцию выборки (Line Parcer). Добавляем ее путем простого перетаскивания из дерева доступных функций в формируемое правило. Функций должно быть две: одна будет обрабатывать поле, в котором содержится имя отправителя, вторая - поле с его адресом (Sender Name и Sender Email). Выделенные данные будут сохранены в определенные вами переменные. Теперь их надо сохранить.

Для сохранения полученных данных применим функцию File Writer. Добавим ее в правило так же, как и предыдущие функции. Теперь необходимо настроить ее свойства. К ним относится имя файла, в который будет записываться информация. В шаблон для записи информации внесем названия переменных, содержащих требуемые данные. Завершить строку с переменными надо переводом каретки, чтобы следующая запись начиналась с новой строки. И выбрать вариант - записывать в новый файл или добавлять в существующий. (Если в новый, то можно назначить префикс для формирования уникального имени файла.)

Осталось проверить, правильно ли подготовлено правило. Для этого создайте файлы с тестовыми сообщениями и через панель управления выполните их загрузку в правило (они появятся в разделе Debug Messages). Теперь можно выполнить процесс тестирования и в журнале отладки просмотреть результаты. Эти результаты помогут однозначно определить, есть или нет в вашем правиле ошибки. Если ошибок нет, то правило можно будет использовать для обработки входящей почты. Если у вас не одно правило, а несколько, то одно и то же сообщение может быть обработано несколькими правилами. Для обеспечения такой возможности в свойствах правила надо отметить пункт Continue With Next Rule.

Можно создать правило и для обработки вложений - для автоматического их сохранения. Обработка входящих выполняется на основе анализа заголовка сообщения, которое должно в случае вложений содержать слово multipart. Для сохранения вложений на диск есть специальная функция - Attachments Writer. Этот компонент позволяет задать список переменных, в которые будут помещены имена сохраненных файлов, а также папку, в которую они будут сохранены. Чтобы у вас не проявилась ситуация появления файлов с одним и тем же именем, вы можете назначить добавление к имени файла даты и времени. Эти данные будут браться на момент сохранения вложений на диск.

В качестве дополнительной обработки можно уточнить, какие именно файлы вы хотите сохранять. Например, это должны быть файлы с определенным расширением. Для этого вам потребуется использовать функцию DeleteFile объекта FileSystemObject. Этот объект создается и используется в коде JScript Component.

Можно создать правило и для ответов на запросы респондентов. Например, если они запрашивают определенную документацию. Определим, что для этого тема письма должна иметь определенный формат, а сами письма посланы на определенный адрес. Следовательно, в первую очередь выделяем письма на этот адрес, а затем выполняем фильтр сообщений по их теме. (Для фильтрации по адресу используем фильтр Recipient Email Filter.)

Следующий шаг - определение адреса отправителя (аналогично описанному выше). Далее из темы сообщения надо выделить название документа, который запрашивает пользователь. Эти данные сохраняем в определяемых нами переменных. Для отправки ответа используйте функцию SMTP Sender (но перед этим надо еще проверить на корректность название запрошенного документа, что можно выполнить с помощью функции Simple Condition).

Для функции SMTP Sender в ее свойствах укажем тему письма и текст, который будет отправлен. Документация, запрошенная респондентом, будет отправлена в виде вложения. Если ваш пользователь может запросить разную документацию, то для отправки каждой из них надо создать свою функцию обработки. Сделать это можно за счет копирования первой созданной обработки и корректировки ее свойств.

Здесь были представлены реализованные примеры использования программы. Но можно придумать и другие варианты. В программе достаточно разноообразные возможности и широкий набор функций. Хотя по сравнению с настройкой обработчиков сообщений в почтовых клиентах настройка AEP сложнее, поскольку здесь она в большей степени ориентирована все же на программистов, а не на рядовых пользователей. Но так как программа предназначена для использования в компании, то наверняка там найдется системный администратор, который сможет настроить эту систему.

» PHP Sendmail Script

PHPSendMail

Для использования формы нужно просто внести установки своей почты и все. В целом скрипт готов к использованию и эта форма обратной связи для сайта на HTML с PHP обработчиком, идеально подойдет для небольших сайтов, сайтов визиток.

| Скачано: раз

Simple PHP Send Mail

С этим очень ЛЁГКИМ php скриптом, посетители вашего сайта смогут отправлять письма непосредственно вам на почту через форму обратной связи.

| Скачано: раз

PHP + AJAX скрипт отправки форм на E-mail

Универсальный скрипт отправки данных из форм на email. Скрипт идеально подойдет для сайтов типа Landing Page, сайтов визиток и т.д.

| Скачано: раз

PHP Mailer Final с капчей

Скрипт выводит форму и, при заполнении необходимых полей, отправляет на Ваш e-mail сообщение. В скрипт встроена защита от роботов: перед отправкой письма надо ввести капчу.

| Скачано: раз

GentleSource Form Mail

На ваш выбор две опции: или пользователь при помощи редиректа попадает на Thank-You-Page с вашим текстом или же, пользователю отображается информация, о том, что сообщение успешно отправлено.

| Скачано: раз

Micro Mailer

Micro Mailer – это не большой PHP скрипт, который позволяет вам и посетителям вашего сайта отправить письмо любому адресату.

| Скачано: раз

Web4you-FM

Web4you-FM Отправка письма с вашего сайта. Возможности: 1 - Выбор адресата и сколько их будет (от 1 до 4). 2 - Проверка на корректность заполнения формы. Кому. Имени, только буквы...

| v.1.0 | Скачано: раз

Light PHP Contact Form

Настолько простой скрипт отправки почты, через форму обратной связи, что даже человек, не знающий PHP/HTML языка, сможет использовать программу без затруднений...

| Скачано: раз

DodosMail

DodosMail – это простой в установке PHP скрипт, который позволяет отправлять письма через форму обратной связи, на вашем сайте. Вам просто нужно загрузить php файл.

| v.2.5 | Скачано: раз

PHP Contact Form

Скрипт PHP Contact Form включает в себя следующие функции: 1) функция предотвращения спама. Пользователь должен ввести защитный код, также известный как капча.

| Скачано: раз

TPCS Contact (email form)

Этот TPCS Contact скрипт, позволит вашим посетителям связаться с вами через форму обратной связи. Вся информация будет отправлена вам на электронную почту.

| Скачано: раз

Feedback mailer

Feedback mailer перенаправляет всю информацию из формы обратной связи на вашем сайте, напрямую к вам на почту. Этот маленький скрипт очень быстро обрабатывает все запросы.

| v.1.2 | Скачано: раз

Easy PHP Contact Form

Простой, но безопасный PHP скрипт контакта с вебмастером при помощи формы обратной связи с проверкой кода (КАПЧА) для предотвращения спама.

| v.2.1 | Скачано: раз

PHP Contact form (with image verification)

Контактная форма, которая предотвращает спам, спрашивая пользователя ввести защитный код с картинки. Если вы используете совсем простую форму обратной связи, рано или поздно спаммеры найдут способ посылать вам рекламу в автоматическом режиме.

| Скачано: раз

CW3 Form Mail

Скрипт очень легко установить и настроить под внешний вид вашего сайта. Вы можете изменить размер формы обратной связи и текст сообщения, которое выводиться при успешной отправки письма.

| v.3.30 | Скачано: раз

reCAPTCHA Contact Form

Этот бесплатный скрипт PHP обратной связи, позволяет гораздо легче получать письма или отзывы от ваших посетителей. Вашим посетителем, нужно только заполнить все необходимые поля контактной...

| v.1.4 | Скачано: раз

phMailer

phMailer – это очень простой PHP скрипт обратной связи, который поддерживает функцию прикрепления файла (attachments) благодаря встроенной mail() function языка PHP.


Электронная почта – это важнейший инструмент для обмена информацией и если вы её используете для работы, то наверняка сталкивались с ситуацией: на почту приходит письмо, в котором содержатся данные необходимые для обработки скрипом. Говорить мы будем о Яндекс почте – в этой статье я поделюсь с вами, дорогие читатели, опытом как достать письма из ящика, так же мы разберем вариант, когда в письме есть вложенный файл - как его обнаружить и в итоге скачать для дальнейших манипуляций над ним.

Сам я с этой задачей столкнулся достаточно давно, и тогда при наличии малого опыта работы c почтовыми программами Яндекса потратил массу времени и нервов для достижения требуемого результата. Первая моя ошибка заключалась в том, что, как многие веб-разработчики, я начел интенсивно искать похожие примеры в сети, но не воспользовался самой справкой (помощью) Яндекс. Да, там есть полезная информация, хотя её и очень мало, но она достаточно важная для написания такого рода скрипта (об этом будет ниже). На то время требовалось написать скрипт, суть которого сводилось: на Яндекс почту заказчика приходило письмо с прайсом товаров в xls формате раз в сутки, его необходимо было обработать (распарсить и сравнить с данными из БД интернет магазина и, в зависимости от результата, что-то обновить где-то, отключить или включить).

И первое, что мы сделаем перед написанием скрипта – это наметим наш план действий, который будет состоять из девяти пунктов:

  1. Настроим почту для получения доступа через почтовые протоколы;
  2. Наметим саму структуру PHP приложения и определимся с кодировкой файлов;
  3. Познакомимся с почтовым протоколом IMAP и его возможностями;
  4. Подключимся к Яндекс почте через логин и пароль аккаунта и отследим ошибки на этом этапе;
  5. Обработаем шапку письма;
  6. Получим и обработаем тела письма;
  7. Получим и сохраним вложенные файлы;
  8. Визуализируем проделанную работу;
  9. Сделаем выводы.

Тема довольно объёмная, но я постараюсь изложить всё максимально компактно и понятно. Пожалуй, приступим.

Настройка почты

Переходим в свою почту и заходим в настройки, как показано ниже на скриншоте:



Теперь мы попали в настройки работы почты через протоколы IMAP и POP3:


Тут многие увидят картину как на изображение выше, но я сталкивался, и не один раз, когда доступы отключены. Поэтому если у вас настройки другие, ставим галочки как на скриншоте, для нас главное разрешить доступ через протокол IMAP.

Структура приложения и её кодировка

В этом примере мы не будем придумывать сложную структуру приложения, так как она не нужна, а добавим только то, что необходимо (я работаю в редакторе Sublime Text):


  • tmp – папка в которую будем загружать вложенные файлы из письма, если они есть;
  • .htaccess – настройка серверной части, если у вас сервер apache;
  • functions.php – сюда будем добавлять наши функции;
  • main.css – файл стилей;
  • index.php – точка входа приложения;

Кодировку будем использовать UTF-8 и поэтому сразу заполним файл.htaccess следующими строками:

AddDefaultCharset utf-8 AddCharset utf-8 * CharsetSourceEnc utf-8 CharsetDefault utf-8

Протокол IMAP

Возвращаясь к первому пункту видно, что работать с почтой Яндекс можно также и через протокол POP3. Так почему же именно IMAP? Из двух этих протоков IMAP является более новым и альтернативным POP3, следовательно, у него есть ряд преимуществ (их можно изучить, воспользовавшись википедией), но в нашем случае на выбор повлияло только то, что он более новый. Лично я особой разницы не вижу, что использовать под конкретную задачу получения письма. Если по какой либо причине вам потребуется использовать протокол POP3 то все функции, которые применимы к IMAP будут работать и для него.

Подключаемся к Яндекс почте при помощи протокола IMAP

Для того чтобы подключиться к почте нам нужно знать три параметра: логин почты, её пароль и адрес почтового сервера. Если с двумя параметрами проблем нет, то второй можно найти именно в помощи Яндекс. Об этом (возникшей у меня проблеме) я выше и писал в сети масса примеров, где третий параметр указан не правильно и, представьте себе, что уже на стадии подключения возникают ошибки – это, как минимум, неприятно. Я не буду ходить вокруг да около и сразу дам прямую ссылку на страницу Яндекс – настройка почтовых программ . Вот собственно что нам нужно для подключения:


Теперь можно переходить непосредственно к самому коду:

Header("Content-Type: text/html; charset=utf-8"); error_reporting(0); require_once("functions.php"); $mail_login = "yandex_почта"; $mail_password = "пароль_от_почты"; $mail_imap = "{imap.yandex.ru:993/imap/ssl}"; // Список учитываемых типов файлов $mail_filetypes = array("MSWORD"); $connection = imap_open($mail_imap, $mail_login, $mail_password); if(!$connection){ echo("Ошибка соединения с почтой - ".$mail_login); exit; }else{ $msg_num = imap_num_msg($connection); $mails_data = array(); for($i = 1; $i <= $msg_num; $i++){ /* Работать с каждым письмом из IMAP-потока будем тут */ } } imap_close($connection);

Первым делом дополнительно указываем кодировку UTF-8 при помощи заголовка и отключаем отображение ошибок. Подключаем файл functions.php и указываем настройки, о которых выше была речь. В массиве $mail_filetypes прописываем форматы файлов, которые нам нужны. Так было решено сделать, чтобы отсеять ненужный мусор, и получать конкретные файлы. Соединение с почтой происходит при помощи функции imap_open(), которая при удачном выполнении возвращает IMAP-поток, а при неудачном - false (но если включить отображение ошибок, то это не так). Завершаем работу с потоками при помощи функции imap_close() передав ей индикатор соединения. Между этими двумя функциями идёт обычный условный оператор.

При удачном соединении при помощи imap_num_msg() узнаем число писем на почте и добавляем массив, в который будем помещать все нам необходимые данные из потока. Далее следует цикл, в котором будет обрабатываться каждое письмо по его номеру (нумерация происходит от 1) по отдельности.

Обработка шапки письма

Для получения шапки письма необходимо воспользоваться функцией imap_header(), вторым параметром которой являет номер письма:

// Шапка письма $msg_header = imap_header($connection, $i);

На данном этапе мы получим объект, из которого и будем вытягивать нужные нам данные, сохраняя в массив $mails_data. Вот пример одного из писем:

На этом скриншоте видно, что все данные дублируются, но это особой роли не играет, тянем, то, что удобнее. Намного важнее - кодировка темы письма. Она может быть какой угодно и этот момент надо контролировать. Такая же ситуация и с телом письма и с вложенными файлами.

$mails_data[$i]["time"] = time($msg_header->MailDate); $mails_data[$i]["date"] = $msg_header->MailDate; foreach($msg_header->to as $data){ $mails_data[$i]["to"] = $data->mailbox."@".$data->host; } foreach($msg_header->from as $data){ $mails_data[$i]["from"] = $data->mailbox."@".$data->host; }

Сохраняем в нашем массиве: временную метку, дату получения письма, email получателя и отправителя и переходим к получению темы письма. Для этого нам необходимо вначале добавить три функции в файл functions.php:

Function check_utf8($charset){ if(strtolower($charset) != "utf-8"){ return false; } return true; } function convert_to_utf8($in_charset, $str){ return iconv(strtolower($in_charset), "utf-8", $str); } function get_imap_title($str){ $mime = imap_mime_header_decode($str); $title = ""; foreach($mime as $key => $m){ if(!check_utf8($m->charset)){ $title .= convert_to_utf8($m->charset, $m->text); }else{ $title .= $m->text; } } return $title; }

Названия говорящие и, я думаю, стоит пояснить только последнюю функцию. Она принимает закодированную строку и при помощи imap_mime_header_decode() декодирует ее, в результате чего возвращается массив объектов, у каждого из которых есть два свойства charset (кодировка) и text (текст темы). Дальше всё просто: в цикле проверяя кодировку, приводим к UTF-8 и склеиваем тему в единый заголовок и возвращаем его.

Теперь вернёмся в файл index.php и вытянем последний параметр:

$mails_data[$i]["title"] = get_imap_title($msg_header->subject);

На этом обработка шапки письма будет завершена.

Работаем с телом письма

Продолжаем постепенно формировать наш массив с обработанными данными письма и теперь для получения тела нам необходимо воспользоваться двумя функциями:

// Тело письма $msg_structure = imap_fetchstructure($connection, $i); $msg_body = imap_fetchbody($connection, $i, 1);

В первой переменной $msg_structure находится структура письма – это объект, в котором можно найти массу полезной информации, пример части этого объекта представлен ниже:

Что важно для решения нашей задачи:

  • type – первичный тип тела письма, в зависимости от того, что к нам приходит на почту он может меняться от 0 до 7 (каждой цифре советует свой вид контента который находиться в теле письма);
  • encoding – кодировка трансфера тела, меняется от 0 до 5 (0 - 7BIT, 1 - 8BIT, 2 – BINARY, 3 - BASE64, 4 - QUOTED-PRINTABLE, 5 - OTHER);
  • parts – массив частей письма, который соответствует структуре объекта уровнем выше.

Немного подробнее рассмотрим свойство parts. Первое, что нужно сказать это то, что в нулевой ячейке этого массива находиться информация, соответствующая именно тексту письма, а начиная с первого – вложенным файлам. Также в каждом объекте указывается type и в parameters кодировка в явном и в не явном виде.

Структура письма может быть сколько угодно вложенной, по крайне мере у меня были случаи, когда доходило до четырёх - пяти уровней, поэтому чтобы её, как говорится, раздраконить нам в дальнейшем потребуется написать рекурсивную функцию.

Вторая функция imap_fetchbody() извлекает определённую часть письма, чаще всего в закодированном виде.

Теперь добавим переменную, в которую будем сохранять обработанную версию тела письма:

$body = "";

Вернёмся в файл functions.php и напишем рекурсивную функцию:

Function recursive_search($structure){ $encoding = ""; if($structure->subtype == "HTML" || $structure->type == 0){ if($structure->parameters->attribute == "charset"){ $charset = $structure->parameters->value; } return array("encoding" => $structure->encoding, "charset" => strtolower($charset), "subtype" => $structure->subtype); }else{ if(isset($structure->parts)){ return recursive_search($structure->parts); }else{ if($structure->parameters->attribute == "charset"){ $charset = $structure->parameters->value; } return array("encoding" => $structure->encoding, "charset" => strtolower($charset), "subtype" => $structure->subtype); } } }

Функция recursive_search() принимает один параметр – структуру письма, где последовательно проверяет свойства и достает три параметра: encoding, charset, subtype. Точкой выхода из рекурсии является отсутствие свойства parts с нулевой ячейкой. Больше пояснять тут особо нечего, из кода я думаю понятно, что и как происходит.

Добавим ещё одну функцию для переконвертации тела письма, которая нам потребуется в дальнейшем:

Function structure_encoding($encoding, $msg_body){ switch((int) $encoding){ case 4: $body = imap_qprint($msg_body); break; case 3: $body = imap_base64($msg_body); break; case 2: $body = imap_binary($msg_body); break; case 1: $body = imap_8bit($msg_body); break; case 0: $body = $msg_body; break; default: $body = ""; break; } return $body; }

$recursive_data = recursive_search($msg_structure); if($recursive_data["encoding"] == 0 || $recursive_data["encoding"] == 1){ $body = $msg_body; } if($recursive_data["encoding"] == 4){ $body = structure_encoding($recursive_data["encoding"], $msg_body); } if($recursive_data["encoding"] == 3){ $body = structure_encoding($recursive_data["encoding"], $msg_body); } if($recursive_data["encoding"] == 2){ $body = structure_encoding($recursive_data["encoding"], $msg_body); } if(!check_utf8($recursive_data["charset"])){ $body = convert_to_utf8($recursive_data["charset"], $msg_body); }

После того, как мы получили данные из рекурсии, постепенно проверяем кодировку трансфера и, в зависимости от этого, вызываем функцию structure_encoding() с соответствующими параметрами. В последнем условном операторе учитываем, то, что мы работает в UTF-8 и если после всех манипуляций у нас получится отличное от кодировки, перекодируем.

Осталось подвести черту:

$mails_data[$i]["body"] = base64_encode($body);

В теле письма может оказаться, как и обычный текст, так и HTML разметка со своими стилями. Кодируем в BASE64, чтобы при визуализации не поехала уже наша верстка.

Вложенные файлы

Вот, плавно подбираемся к концу написания нашего приложения:

// Вложенные файлы if(isset($msg_structure->parts)){ for($j = 1, $f = 2; $j < count($msg_structure->parts); $j++, $f++){ if(in_array($msg_structure->parts[$j]->subtype, $mail_filetypes)){ $mails_data[$i]["attachs"][$j]["type"] = $msg_structure->parts[$j]->subtype; $mails_data[$i]["attachs"][$j]["size"] = $msg_structure->parts[$j]->bytes; $mails_data[$i]["attachs"][$j]["name"] = get_imap_title($msg_structure->parts[$j]->parameters->value); $mails_data[$i]["attachs"][$j]["file"] = structure_encoding($msg_structure->parts[$j]->encoding, imap_fetchbody($connection, $i, $f)); file_put_contents("tmp/".iconv("utf-8", "cp1251", $mails_data[$i]["attachs"][$j]["name"]), $mails_data[$i]["attachs"][$j]["file"]); } } }

Кусок, отвечающий за обработку вложенного файла гораздо меньше, а теперь - почему именно так. Принцип работы с файлом аналогичен работе с телом письма, только этот этап начинаем с наличия его в массиве свойства parts. Не забываем отсеивать ненужные, сверяясь со списком типов. При помощи нехитрой функции file_put_contents() мы сохраняем наш файл к себе на сервер в папку tmp.

Хочу увидеть результат!

В процессе работы у нас сформировался массив с данными $mails_data, и для визуализации мы уже будем работать непосредственно с ним. В этой статье я использовал тестовое письмо, которое лежало у меня почте, давайте глянем, что у нас получилось в итоге:


Вот какого вида примерно должен у вас получиться массив, увы, пришлось скрыть содержание файла по личным причинам. Теперь переходим к нашей HTML разметке:

Яндекс Почта | <?php echo($mail_login);?>

Яндекс Почта (Входящие) |

Число писем:

писем нет
$mail):?>
Временная метка:
Дата:
Кому:
От:
Тема:
Письмо в base64:
Вложенные файлы:
$attach):?>
Тип:
Размер (в байтах):
Имя:
Тело:

Стили я не буду тут добавлять, так как они особой роли не играют, в итоге:


А на сервере в папке tmp у вас появится файл.

Заключение

Проделав все этапы из статьи, вы достигните должного результата, но всё не так просто, как может показаться – есть подводные камни, которые необходимо учитывать. При написании скрипта под конкретную задачу необходимо следить за кодировкой на всех этапах, письма могут идти с различных почт, у каждой из которых могут быть свои нюансы. Так же немаловажным будет учитывать, что Яндекс почта и их документация периодический обновляется, поэтому могут появиться различные подпункты для работы с почтовыми программами. На этом у меня всё, надеюсь вам пригодиться данная статья при работе с более низкоуровневым вариантом Яндекс почты.

Не получается получить письмо с вложением(
если отправляется почта с файлом - любым - то пропадает текст письма

Помогите пожалуйста

Понятно... если с яндекса на яндекс перебрасывать почту то все получается...
типа разобрался
но вот почему другие файлы кроме ворда этот скрипт не принимает не понятно... там есть строчка MSWORD рядом через запятую поставил и пдф и жпг и пнг - читает и сохраняет нормально только ворд.... как то так