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.


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

Сам я з цим завданням зіткнувся досить давно, і тоді за наявності малого досвіду роботи з поштовими програмами Яндекса витратив багато часу і нервів для досягнення необхідного результату. Перша моя помилка полягала в тому, що, як і багато веб-розробників, я почав інтенсивно шукати схожі приклади в мережі, але не скористався самою довідкою (допомогою) Яндекс. Так, там є корисна інформація, хоча її й дуже мало, але вона досить важлива для написання такого роду скрипту (про це буде нижче). На той час потрібно було написати скрипт, суть якого зводилося: на Яндекс пошту замовника приходив лист із прайсом товарів у 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. Перше, що треба сказати, це те, що в нульовому осередку цього масиву знаходиться інформація, що відповідає саме тексту листа, а починаючи з першого – вкладеним файлам. Також у кожному об'єкті вказується тип і в параметрах кодування в явному і неявному вигляді.

Структура листа може бути скільки завгодно вкладеною, принаймні в мене були випадки, коли доходило до чотирьох - п'яти рівнів, тому щоб її, як кажуть, роздраконити нам надалі потрібно написати рекурсивну функцію.

Друга функція 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); 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; ; )

$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); 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; $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 поряд через кому поставив і пдф і жпг і пнг - читає і зберігає нормально тільки ворд .... як то так