Symfony¶
Инструкция для приложений на Symfony 6.4 / 7.x. Mailexam подключается через Symfony Mailer и DSN smtp:// в .env.
Что понадобится¶
- Аккаунт Mailexam и проект с SMTP-учётными данными.
- Symfony-приложение (Skeleton или Webapp).
Скопируйте из приветственного письма (или кабинета) для вашего проекта:
ВАШ_ЛОГИН— SMTP-логин (например,xxxxx);ВАШ_ПАРОЛЬ— SMTP-пароль (уникальная пара к логину);- хост —
ВАШ_ЛОГИН.mailexam.ru(совпадает с логином).
1. Зависимости¶
Если Mailer ещё не установлен:
В шаблоне Symfony Webapp пакет обычно уже подключён.
2. Переменные окружения¶
Файл .env (или .env.local, не коммитьте секреты):
MAILEXAM_LOGIN=ВАШ_ЛОГИН
MAILEXAM_PASSWORD=ВАШ_ПАРОЛЬ
MAILEXAM_PORT=587
MAIL_FROM=noreply@example.test
###> symfony/mailer ###
MAILER_DSN=smtp://${MAILEXAM_LOGIN}:${MAILEXAM_PASSWORD}@${MAILEXAM_LOGIN}.mailexam.ru:${MAILEXAM_PORT}
###< symfony/mailer ###
Хост в DSN — ВАШ_ЛОГИН.mailexam.ru, логин и пароль — из письма.
Адрес отправителя
MAIL_FROM может быть любым тестовым адресом — письмо попадёт в Mailexam, а не реальному получателю.
Спецсимволы в пароле
Если в пароле есть @, :, / и другие символы DSN, закодируйте пароль для URL (rawurlencode) или задайте MAILER_DSN вручную в .env.local одной строкой.
Альтернативные порты¶
3. Конфигурация Mailer¶
Файл config/packages/mailer.yaml (создаётся Flex автоматически):
Дополнительных транспортов для Mailexam не требуется.
4. Отправка тестового письма¶
Через контроллер¶
// src/Controller/MailController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Routing\Attribute\Route;
final class MailController extends AbstractController
{
#[Route('/mail/test', name: 'mail_test', methods: ['POST'])]
public function test(MailerInterface $mailer): JsonResponse
{
$from = $_ENV['MAIL_FROM'] ?? 'noreply@example.test';
$mailer->send(
(new Email())
->from($from)
->to('user@example.test')
->subject('Symfony + Mailexam')
->text('Тест Mailexam из Symfony')
);
return $this->json(['status' => 'ok']);
}
}
Запуск и проверка:
Через консоль¶
(команда доступна, если установлен symfony/mailer и настроен DSN.)
Письмо появится в кабинете Mailexam → ваш проект → входящие.
5. Локальная разработка и CI¶
| Среда | Рекомендация |
|---|---|
local |
.env.local с MAILER_DSN |
| CI | Секреты MAILEXAM_LOGIN, MAILEXAM_PASSWORD; соберите MAILER_DSN в job |
Пример для GitLab CI:
variables:
MAILEXAM_LOGIN: $MAILEXAM_LOGIN
MAILEXAM_PASSWORD: $MAILEXAM_PASSWORD
MAILEXAM_PORT: "587"
MAIL_FROM: "noreply@example.test"
MAILER_DSN: "smtp://${MAILEXAM_LOGIN}:${MAILEXAM_PASSWORD}@${MAILEXAM_LOGIN}.mailexam.ru:587"
Для unit-тестов без реальной отправки в config/packages/test/mailer.yaml:
6. Типичные проблемы¶
Authentication failed / connection refused
- Проверьте
MAILER_DSN: хост{логин}.mailexam.ru, логин и пароль — пара из письма. - Логин в URL пользователя DSN должен совпадать с поддоменом хоста.
Ошибка из-за символов в пароле
- Используйте
rawurlencodeдля пароля в DSN или задайте полную строку DSN вручную в.env.local.
Письмо не в кабинете
- Убедитесь, что в
testне переопределёнnull://nulltransport. - Смотрите входящие того же проекта Mailexam.
Кэш конфигурации
- После смены
.env:php bin/console cache:clear.
См. также¶
- Каталог примеров
- Пример реализации (Symfony)
- Laravel и Yii — другие PHP-фреймворки
- Документация REST API Mailexam
- Symfony Mailer