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

Magento

Инструкция для магазинов на Magento 2 Open Source или Commerce 2.4+. Mailexam® подключается как SMTP-сервер через кастомный модуль, который перенаправляет транспорт почты Magento и предоставляет тестовый эндпоинт.

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

  • Аккаунт Mailexam® и проект с SMTP-учетными данными.
  • Magento 2.4+ и PHP 8.1+.

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

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

1. Переменные окружения в env.php

Добавьте в секцию env файла app/etc/env.php (не коммитьте пароли в публичный репозиторий):

'env' => [
    'MAILEXAM_LOGIN' => 'ВАШ_ЛОГИН',
    'MAILEXAM_PASSWORD' => 'ВАШ_ПАРОЛЬ',
    'MAILEXAM_PORT' => '587',
    'MAIL_FROM' => 'noreply@example.test',
],

SMTP-хост в коде: ВАШ_ЛОГИН.mailexam.ru.

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

MAIL_FROM может быть любым тестовым адресом — письмо все равно попадет в Mailexam®, а не реальному получателю.

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

'MAILEXAM_PORT' => '587',

Модуль использует STARTTLS для портов 587 и 2525.

'MAILEXAM_PORT' => '2525',
'MAILEXAM_PORT' => '25',

Обычный SMTP без STARTTLS.

2. Установка модуля

Скопируйте app/code/Mailexam/Smtp из репозитория с реализацией в ваш магазин, затем включите модуль:

bin/magento module:enable Mailexam_Smtp
bin/magento setup:upgrade
bin/magento cache:flush

Модуль содержит:

  • Model/SmtpSender.php — SMTP-клиент со STARTTLS на порту 587;
  • Plugin/Mail/TransportPlugin.php — направляет транзакционную почту Magento через Mailexam, когда заданы учетные данные;
  • Controller/Mail/Test.php — тестовый эндпоинт POST /mailexam/mail/test.

3. SMTP-отправка (фрагмент)

// app/code/Mailexam/Smtp/Model/SmtpSender.php
public function send(string $to, string $subject, string $body, ?string $from = null): void
{
    if (!$this->config->isConfigured()) {
        throw new \RuntimeException('MAILEXAM_LOGIN and MAILEXAM_PASSWORD must be set');
    }

    $host = $this->config->getHost(); // {login}.mailexam.ru
    $port = $this->config->getPort();

    if (in_array($port, [587, 2525], true)) {
        $this->sendWithStartTls(/* ... */);
        return;
    }

    $this->sendPlain(/* ... */);
}

Полный код модуля доступен в репозитории на Mos.Hub.

4. Тестовая отправка

curl -X POST https://your-store.test/mailexam/mail/test \
  -H 'Content-Type: application/json' \
  -d '{"to":"user@example.test","subject":"Проверка","body":"Привет"}'

Письмо появится в личном кабинете Mailexam® → ваш проект → входящие.

Если заданы MAILEXAM_LOGIN и MAILEXAM_PASSWORD, подтверждения заказов и другие письма Magento также будут отправляться через SMTP Mailexam.

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

Среда Рекомендация
local секция env в app/etc/env.php
CI секреты MAILEXAM_LOGIN, MAILEXAM_PASSWORD в переменных pipeline

Пример для .gitlab-ci.yml:

variables:
  MAILEXAM_LOGIN: $MAILEXAM_LOGIN
  MAILEXAM_PASSWORD: $MAILEXAM_PASSWORD
  MAILEXAM_PORT: "587"
  MAIL_FROM: "noreply@example.test"

После интеграционного теста проверьте доставку через API Mailexam®.

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

Модуль не найден после копирования

  • Путь должен быть app/code/Mailexam/Smtp, затем выполните bin/magento setup:upgrade.

Ошибка TLS или authentication failed

  • Хост должен быть {логин}.mailexam.ru, username — тот же логин из письма.
  • Логин и пароль — пара из приветственного письма одного проекта.

Тестовый эндпоинт возвращает 404

  • Выполните bin/magento cache:flush и убедитесь, что модуль включен.

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

  • Откройте входящие того же проекта Mailexam®.
  • Проверьте var/log/exception.log и JSON-ошибку в ответе тестового эндпоинта.

См. также