PHP парсер почты с интерфейсом на Laravel 11

PHP

Введение

В этой статье мы рассмотрим, как создать скрипт на PHP для загрузки файлов из электронной почты в базу данных. Мы будем использовать PHP 8.2, фреймворк Laravel и библиотеку webklex/laravel-imap для парсинга почты. Этот подход может быть полезен для автоматизации обработки файлов, которые приходят на электронную почту, и их сохранения в базе данных.

Требования к проекту

Для реализации данного проекта нам понадобятся следующие компоненты:

  • PHP 8.2 – современная версия языка программирования PHP.
  • Laravel – популярный фреймворк для разработки веб-приложений на PHP.
  • Filament – административная панель для Laravel, которая упрощает разработку интерфейсов управления приложением.
  • webklex/laravel-imap – библиотека для работы с IMAP-серверами, позволяющая легко получать доступ к почтовым ящикам.

Установка и настройка проекта

Начнем с создания нового проекта на основе Laravel. Откройте терминал и выполните следующую команду:

composer create-project laravel/laravel myproject

Это создаст новый проект Laravel в директории myproject. После этого перейдем внутрь созданной директории и установим необходимые пакеты:

cd myproject
composer require filament/filament
composer require webklex/laravel-imap
php artisan filament:install --panels

Теперь настроим подключение к базе данных. Откройте файл .env и добавьте настройки подключения к вашей базе данных:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_password

После этого выполните миграцию базы данных:

php artisan migrate

Вы можете создать новую учетную запись пользователя с помощью следующей команды:

php artisan make:filament-user

Настройка библиотеки webklex/laravel-imap

Добавьте соответствующие переменные окружения в ваш файл .env:

IMAP_HOST=imap.gmail.com
IMAP_PORT="143"
IMAP_ENCRYPTION=""
IMAP_VALIDATE_CERT="false"
IMAP_USERNAME=your_email@example.com
IMAP_PASSWORD=your_password
IMAP_DEFAULT_ACCOUNT=default
IMAP_PROTOCOL=imap

Отправка тестового сообщения на почту

Допустим у нас на почте в папке есть письмо, и нам нужно сохранить вложение в бд

PHP парсер почты с интерфейсом на Laravel 11

И содержимое файла

PHP парсер почты с интерфейсом на Laravel 11

Создание модели и миграции для хранения файлов

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

php artisan make:model File -m

Откройте созданный файл миграции и добавьте поля для хранения имени файла и пути к нему:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateFilesTable extends Migration
{
    public function up()
    {
        Schema::create('files', function (Blueprint $table) {
            $table->id();
            $table->string('value')->nullable();
            $table->string('code')->nullable();
            $table->string('DateS')->nullable();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('files');
    }
}

И заполним модель:

Создание модели и миграции для настройки для загрузки файлов

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

php artisan make:model ImportSetting -m

Откройте созданный файл миграции и добавьте поля для хранения имени файла и пути к нему:

Ну и модель к нему:

Выполним миграцию:

php artisan migrate

Парсер писем и загрузка файлов

Шаг 1: Создание класса сервиса

Создайте новый PHP-файл внутри директории app/Services с именем ImportService.php

Шаг 2: Настройка конструктора и методов

Откройте созданный файл app/Services/ImportService.php и добавьте необходимые методы и зависимости.
Вот пример кода для ImportService:

Создайте новый класс командной строки для парсинга писем и загрузки файлов. Выполните следующую команду:

php artisan make:command ParseEmailsCommand

Откроем созданный файл app\Console\Commands\ParseEmailsCommand.php

Интерфейс для загрузки файла

Создадим интерфейс на filament

После создания стандартного ресурса, нам нужно будет добавить селект для выбора модели импорта.

Для этого создадим еще один сервис app\Services\OptionService.php

app\Services\OptionService.php

Теперь можно зарегистрировать этот сервис в фасаде. Для этого создадим файл app\Facades\Option.php

Теперь можно добавить в селект выбор Модели для импорта

PHP парсер почты с интерфейсом на Laravel 11

И форма для редактирования и создания будет выглядеть следующим образом

PHP парсер почты с интерфейсом на Laravel 11

Запуск скрипта

Сделаем кнопку запуска через интерфейс администратора

Шаг 1. Создадим 3 файла

PHP парсер почты с интерфейсом на Laravel 11
app\Filament\Actions\RunImportTrait.php
app\Filament\Actions\RunImport.php
app\Filament\Actions\Tables\RunImport.php

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

PHP парсер почты с интерфейсом на Laravel 11

И в форму редактирования

PHP парсер почты с интерфейсом на Laravel 11

Теперь чтобы запустить скрипт, достаточно нажать на кнопку Run:

PHP парсер почты с интерфейсом на Laravel 11

Если в ошибок нет, то данные файла сохранятся в нашей базе данных

PHP парсер почты с интерфейсом на Laravel 11

В случае ошибки выйдет информационное сообщение

PHP парсер почты с интерфейсом на Laravel 11


Вы можете настроить регулярный запуск этого скрипта с помощью планировщика задач (cron) на вашем сервере.

Заключение

Мы рассмотрели процесс создания скрипта на PHP для автоматической загрузки файлов из электронной почты в базу данных. Этот подход позволяет существенно упростить обработку больших объемов данных и минимизировать рутинную работу. Использование современных инструментов, таких как Laravel, Filament и webklex/laravel-imap, делает этот процесс быстрым и удобным.

Добавить комментарий