Laravel + Mailexam
Минимальный пример Laravel, который отправляет тестовое письмо через SMTP Mailexam с помощью Laravel Mail.
Основан на руководстве Mailexam для Laravel.
Что понадобится
- Аккаунт Mailexam и проект с SMTP-учётными данными.
- PHP 8.3+ и Composer.
Из приветственного письма или личного кабинета Mailexam:
| Переменная | Описание |
|---|---|
MAIL_USERNAME |
SMTP-логин (например, xxxxx) |
MAIL_PASSWORD |
SMTP-пароль (пара к логину) |
MAIL_HOST |
{логин}.mailexam.ru (должен совпадать с логином) |
Быстрый старт (на хосте)
- Установите зависимости:
composer install
- Скопируйте пример файла окружения и заполните учётные данные:
cp .env.example .env
php artisan key:generate
- Отредактируйте
.env— укажите SMTP Mailexam из приветственного письма:
MAIL_MAILER=smtp
MAIL_SCHEME=smtp
MAIL_HOST=ВАШ_ЛОГИН.mailexam.ru
MAIL_PORT=587
MAIL_USERNAME=ВАШ_ЛОГИН
MAIL_PASSWORD=ВАШ_ПАРОЛЬ
MAIL_FROM_ADDRESS=noreply@example.test
MAIL_FROM_NAME="${APP_NAME}"
- Сбросьте кеш конфигурации после изменений:
php artisan config:clear
- Запустите сервер:
php artisan serve
По умолчанию сервер слушает http://127.0.0.1:8000.
- Отправьте тестовое письмо:
curl -X POST http://127.0.0.1:8000/mail/test \
-H 'Content-Type: application/json' \
-d '{"to":"user@example.test","subject":"Тест","body":"Привет"}'
Письмо появится в личном кабинете Mailexam → ваш проект → входящие.
Переменные окружения
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
MAIL_MAILER |
да | smtp |
Используйте smtp для Mailexam |
MAIL_HOST |
да | — | {логин}.mailexam.ru |
MAIL_PORT |
нет | 587 |
SMTP-порт (587, 2525 или 25) |
MAIL_USERNAME |
да | — | SMTP-логин |
MAIL_PASSWORD |
да | — | SMTP-пароль |
MAIL_SCHEME |
нет | smtp |
smtp для STARTTLS на 587; smtps для 465 |
MAIL_FROM_ADDRESS |
нет | noreply@example.test |
Адрес отправителя |
APP_KEY |
да | — | Выполните php artisan key:generate
|
HTTP_HOST |
нет | 127.0.0.1 |
Адрес привязки HTTP (Docker) |
HTTP_PORT |
нет | 8000 |
Порт HTTP (Docker) |
Для порта 587 используйте MAIL_SCHEME=smtp (STARTTLS). Для порта 465 — MAIL_SCHEME=smtps. Для порта 25 задайте MAIL_SCHEME=null.
Структура проекта
.
├── app/Http/Controllers/MailController.php
├── routes/web.php
├── config/mail.php
├── .env.example
├── Dockerfile # только для локальной отладки
└── docker-compose.yml
Docker (отладка)
Docker предназначен для локальной отладки. Для повседневной разработки запускайте приложение на хосте через php artisan serve (см. выше).
cp .env.example .env
php artisan key:generate
# отредактируйте .env с учётными данными Mailexam
docker compose up --build
Затем вызовите тот же endpoint на проброшенном порту:
curl -X POST http://127.0.0.1:8000/mail/test \
-H 'Content-Type: application/json' \
-d '{"to":"user@example.test","subject":"Тест","body":"Привет"}'
Внутри контейнера сервер слушает 0.0.0.0:8000, чтобы работало проброс портов.
CI
Задайте эти секреты в окружении CI:
variables:
MAIL_MAILER: smtp
MAIL_HOST: "${MAILEXAM_LOGIN}.mailexam.ru"
MAIL_PORT: "587"
MAIL_USERNAME: "${MAILEXAM_LOGIN}"
MAIL_PASSWORD: "${MAILEXAM_PASSWORD}"
MAIL_SCHEME: smtp
MAIL_FROM_ADDRESS: "noreply@example.test"
После отправки письма в тесте проверьте доставку через API Mailexam.
Для unit-тестов без сети используйте MAIL_MAILER=array или log.
Типичные проблемы
Connection could not be established
-
MAIL_HOSTдолжен быть{логин}.mailexam.ru— тот же логин, что вMAIL_USERNAME. - Логин и пароль должны быть из одного проекта Mailexam.
- Выполните
php artisan config:clearпосле изменения.env.
419 CSRF token mismatch
- Маршрут
/mail/testисключён из проверки CSRF для тестирования через curl.
Письмо не в кабинете
- Откройте входящие того же проекта Mailexam.
- Проверьте
storage/logs/laravel.logна ошибки SMTP.
См. также
- Руководство Mailexam для Laravel (wiki)
- Пример на Magento — e-commerce с пользовательским SMTP-модулем
- Пример на Symfony — другой PHP-фреймворк
- Документация Laravel Mail
- Документация API Mailexam
Лицензия
Apache 2.0