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®, а не реальному получателю.
Альтернативные порты¶
2. Установка модуля¶
Скопируйте app/code/Mailexam/Smtp из репозитория с реализацией в ваш магазин, затем включите модуль:
Модуль содержит:
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-ошибку в ответе тестового эндпоинта.