Перейти к содержанию

Laravel

Инструкция для приложений на Laravel (10.x и 11.x). Mailexam подключается как обычный SMTP-сервер — меняется только конфигурация в .env, код отправки (Mail, Mailable, очереди) остаётся прежним.

Что понадобится

  • Аккаунт Mailexam и созданный проект с SMTP-учётными данными.
  • Laravel-приложение с настроенным модулем почты (config/mail.php по умолчанию).

Скопируйте из приветственного письма (или кабинета) для вашего проекта:

  • ВАШ_ЛОГИН — SMTP-логин (например, xxxxx);
  • ВАШ_ПАРОЛЬ — SMTP-пароль (уникальная пара к логину);
  • хост в письме — ВАШ_ЛОГИН.mailexam.ru (имя хоста совпадает с логином).

1. Настройка .env

Добавьте или обновите переменные почты:

MAIL_MAILER=smtp
MAIL_HOST=ВАШ_ЛОГИН.mailexam.ru
MAIL_PORT=587
MAIL_USERNAME=ВАШ_ЛОГИН
MAIL_PASSWORD=ВАШ_ПАРОЛЬ
MAIL_ENCRYPTION=tls

MAIL_FROM_ADDRESS=noreply@example.test
MAIL_FROM_NAME="${APP_NAME}"

Адрес отправителя

MAIL_FROM_ADDRESS может быть любым тестовым адресом — письмо всё равно попадёт в Mailexam, а не к реальному получателю. Для единообразия в тестах удобно использовать домен *.test или @example.com.

Альтернативные порты

MAIL_PORT=587
MAIL_ENCRYPTION=tls
MAIL_PORT=2525
MAIL_ENCRYPTION=tls
MAIL_PORT=25
MAIL_ENCRYPTION=null

Примените конфигурацию:

php artisan config:clear

В production после проверки можно закешировать: php artisan config:cache.

2. Проверка config/mail.php

В стандартном Laravel файл config/mail.php уже читает переменные из .env. Дополнительных правок обычно не требуется. Убедитесь, что mailer smtp использует env('MAIL_HOST'), env('MAIL_PORT') и т.д.

3. Отправка тестового письма

Через Tinker

php artisan tinker
use Illuminate\Support\Facades\Mail;

Mail::raw('Тест Mailexam из Laravel', function ($message) {
    $message->to('user@example.test')
        ->subject('Laravel + Mailexam');
});

Через Mailable

php artisan make:mail WelcomeTestMail
// app/Mail/WelcomeTestMail.php
namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;

class WelcomeTestMail extends Mailable
{
    use Queueable, SerializesModels;

    public function envelope(): Envelope
    {
        return new Envelope(subject: 'Добро пожаловать (тест)');
    }

    public function content(): Content
    {
        return new Content(view: 'emails.welcome-test');
    }
}
use App\Mail\WelcomeTestMail;
use Illuminate\Support\Facades\Mail;

Mail::to('user@example.test')->send(new WelcomeTestMail());

Откройте личный кабинет Mailexam → проект → входящие: письмо должно появиться в течение нескольких секунд.

4. Локальная разработка и CI

Среда Рекомендация
local Отдельный проект Mailexam на разработчика или общий тестовый проект команды
staging Свой проект Mailexam, те же .env через секреты CI
PHPUnit Либо реальный SMTP Mailexam в интеграционных тестах, либо MAIL_MAILER=array / log для unit-тестов без сети

Пример переменных в GitLab CI (Settings → CI/CD → Variables):

variables:
  MAIL_MAILER: smtp
  MAIL_HOST: "${MAILEXAM_LOGIN}.mailexam.ru"
  MAIL_PORT: "587"
  MAIL_USERNAME: "${MAILEXAM_LOGIN}"
  MAIL_PASSWORD: "${MAILEXAM_PASSWORD}"
  MAIL_ENCRYPTION: tls

После отправки письма в pipeline можно проверить доставку через API Mailexam.

5. Типичные проблемы

Connection could not be established

  • MAIL_HOST должен быть ВАШ_ЛОГИН.mailexam.ru — тот же логин, что в MAIL_USERNAME, без префикса smtp..
  • Логин и пароль берите парой из письма, не смешивайте с другим проектом.
  • Выполните php artisan config:clear после изменения .env.

Письмо не видно в кабинете

  • Проверьте, что смотрите входящие того же проекта, чьи учётные данные в .env.
  • Убедитесь, что отправка не ушла в очередь с ошибкой: php artisan queue:work и логи storage/logs/laravel.log.

SSL/TLS ошибки

  • Для порта 587 используйте MAIL_ENCRYPTION=tls, не ssl.
  • Порт 465 с ssl поддерживается, но не рекомендуется для новых интеграций.

См. также