Yii¶
Инструкция для приложений на Yii 2 (2.0.43+). Mailexam подключается как SMTP-сервер через компонент mailer и расширение yii2-symfonymailer.
Что понадобится¶
- Аккаунт Mailexam и проект с SMTP-учётными данными.
- Yii 2 (Basic или Advanced шаблон).
Скопируйте из приветственного письма (или кабинета) для вашего проекта:
ВАШ_ЛОГИН— SMTP-логин (например,xxxxx);ВАШ_ПАРОЛЬ— SMTP-пароль (уникальная пара к логину);- хост —
ВАШ_ЛОГИН.mailexam.ru(совпадает с логином).
1. Зависимости¶
composer require yiisoft/yii2-symfonymailer
composer require vlucas/phpdotenv # для .env в локальной разработке
В composer.json должны появиться пакеты yiisoft/yii2-symfonymailer и при необходимости vlucas/phpdotenv.
2. Переменные окружения¶
Файл .env в корне проекта (добавьте в .gitignore):
MAILEXAM_LOGIN=ВАШ_ЛОГИН
MAILEXAM_PASSWORD=ВАШ_ПАРОЛЬ
MAILEXAM_PORT=587
MAIL_FROM=noreply@example.test
Подключите .env при старте (например, в web/index.php и yii перед созданием приложения):
Хост в конфигурации: ВАШ_ЛОГИН.mailexam.ru.
Адрес отправителя
MAIL_FROM может быть любым тестовым адресом — письмо попадёт в Mailexam, а не реальному получателю.
Альтернативные порты¶
3. Компонент mailer¶
Фрагмент config/web.php (или общий config/main.php):
<?php
$login = getenv('MAILEXAM_LOGIN') ?: '';
$port = (int) (getenv('MAILEXAM_PORT') ?: 587);
return [
// ...
'components' => [
'mailer' => [
'class' => \yii\symfonymailer\Mailer::class,
'useFileTransport' => false,
'transport' => [
'scheme' => 'smtp',
'host' => $login . '.mailexam.ru',
'username' => $login,
'password' => getenv('MAILEXAM_PASSWORD') ?: '',
'port' => $port,
],
],
],
];
Для Advanced Template те же настройки добавьте в common/config/main-local.php.
Убедитесь, что useFileTransport установлен в false, иначе письма сохраняются в файлы вместо отправки на SMTP.
4. Отправка тестового письма¶
Через консоль¶
// commands/MailController.php
namespace app\commands;
use Yii;
use yii\console\Controller;
class MailController extends Controller
{
public function actionTest(): int
{
$from = getenv('MAIL_FROM') ?: 'noreply@example.test';
$sent = Yii::$app->mailer->compose()
->setFrom([$from => 'Mailexam Test'])
->setTo('user@example.test')
->setSubject('Yii + Mailexam')
->setTextBody('Тест Mailexam из Yii')
->send();
$this->stdout($sent ? "ok\n" : "error\n");
return $sent ? self::EXIT_CODE_NORMAL : self::EXIT_CODE_ERROR;
}
}
Через HTTP (контроллер)¶
// controllers/MailController.php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Response;
class MailController extends Controller
{
public function actionTest(): array
{
Yii::$app->response->format = Response::FORMAT_JSON;
$from = getenv('MAIL_FROM') ?: 'noreply@example.test';
Yii::$app->mailer->compose()
->setFrom([$from => 'Mailexam Test'])
->setTo('user@example.test')
->setSubject('Yii + Mailexam')
->setTextBody('Тест Mailexam из Yii')
->send();
return ['status' => 'ok'];
}
}
Добавьте правило в urlManager и откройте маршрут в браузере или вызовите через curl.
Письмо появится в кабинете Mailexam → ваш проект → входящие.
5. Локальная разработка и CI¶
| Среда | Рекомендация |
|---|---|
local |
.env или *-local.php с учётными данными Mailexam |
| CI | Переменные MAILEXAM_LOGIN, MAILEXAM_PASSWORD в секретах pipeline |
Пример для GitLab CI:
variables:
MAILEXAM_LOGIN: $MAILEXAM_LOGIN
MAILEXAM_PASSWORD: $MAILEXAM_PASSWORD
MAILEXAM_PORT: "587"
MAIL_FROM: "noreply@example.test"
После отправки письма в pipeline проверьте доставку через API Mailexam.
6. Типичные проблемы¶
Письмо не отправляется, файлы в runtime/mail
- Проверьте
useFileTransport => falseв конфигурацииmailer.
Ошибка TLS или подключения
hostдолжен быть{логин}.mailexam.ru,username— тот же логин из письма.- Логин и пароль — пара из письма одного проекта.
Переменные окружения пустые
- Вызовите
Dotenv::createImmutable(...)->safeLoad()доnew yii\web\Application($config). - В production задайте переменные в окружении PHP-FPM / контейнера.
Письмо не в кабинете
- Смотрите входящие того же проекта Mailexam.
- Включите debug:
Yii::debug(Yii::$app->mailer->transport)при необходимости.
См. также¶
- Каталог примеров
- Пример реализации (Yii)
- Laravel — другой PHP-фреймворк, те же SMTP-параметры
- Документация REST API Mailexam
- Отправка почты в Yii 2