Документация / Craft CMS

Отправка почты в Craft CMS через SMTP

Craft отправляет активацию аккаунтов, восстановление пароля и всё, что отправляют ваши шаблоны и плагины, через один почтовый компонент, а он по умолчанию использует sendmail сервера. SMTP встроен — плагин не нужен, а переключение на fmailer занимает один экран настроек.

ℹ
Логин и пароль можно получить на странице токенов домена.

Параметры подключения

ПараметрЗначение
SMTP-хостsmtp.fmailer.ru
Порт587
ШифрованиеSTARTTLS (соединение переводится в TLS до авторизации)
ЛогинЛогин токена вашего домена
ПарольПароль этого токена — показывается один раз, при создании
ℹ
Каждый режим доступен и на высоком порту: 8465 (SSL/TLS), 8587 (STARTTLS) и 8025 (без шифрования). Многие хостинги и облака блокируют исходящие 25, 465 и 587 — если соединение обрывается по таймауту, используйте соответствующий высокий порт.

Данные подключения в .env

Настройки почты хранятся в project config, который обычно лежит в репозитории. Значения держите в .env, а в панели ссылайтесь на них:

.env
SYSTEM_EMAIL=noreply@mail.example.ru
SMTP_HOST=smtp.fmailer.ru
SMTP_PORT=587
SMTP_USERNAME=<логин токена>
SMTP_PASSWORD=<пароль токена>

Раздел Settings → Email

В панели управления откройте Settings → Email и заполните поля:

ПолеЗначение
System Email Address$SYSTEM_EMAIL — адрес на подтверждённом домене
Sender NameНазвание сайта
Transport TypeSMTP
Hostname$SMTP_HOST
Port$SMTP_PORT (587)
Use authenticationВключено
Username$SMTP_USERNAME
Password$SMTP_PASSWORD
ℹ
Craft 5 (и Craft 4 начиная с 4.3.7) выбирает его по порту: на 465 шифрование с первого байта, на любом другом — STARTTLS. С портом 587 пароль никогда не уходит открытым текстом.

Или в config/app.php

Чтобы вообще убрать почту из панели управления или задать разный транспорт для разных окружений, переопределите компонент mailer:

config/app.phpphp
<?php
// config/app.php — перекрывает настройки SMTP из панели управления
use craft\helpers\App;
use craft\helpers\MailerHelper;
use craft\mail\transportadapters\Smtp;

return [
    'components' => [
        'mailer' => function() {
            $config = App::mailerConfig();

            $adapter = MailerHelper::createTransportAdapter(Smtp::class, [
                'host' => App::env('SMTP_HOST'),
                'port' => App::env('SMTP_PORT'),
                'useAuthentication' => true,
                'username' => App::env('SMTP_USERNAME'),
                'password' => App::env('SMTP_PASSWORD'),
            ]);
            $config['transport'] = $adapter->defineTransport();

            return Craft::createObject($config);
        },
    ],
];

Проверка

Нажмите Test внизу страницы Settings → Email или выполните ту же проверку из консоли — она выводит ошибку SMTP целиком:

bash
php craft mailer/test --to=you@example.ru

На тестовом стенде общая настройка testToEmailAddress отправляет все письма на один адрес, чтобы не писать реальным пользователям.

Разбор ошибок

ОшибкаПричина и решение
Connection could not be established with host Порт заблокирован или неверный хост. Попробуйте порт 8587.
Таймаут на порту 8465 Craft шифрует с первого байта только на порту 465. Используйте 8587.
Failed to authenticate on SMTP serverНеверный логин или пароль токена.
Сервер требует авторизациюВыключен Use authentication.
Локально работает, после деплоя — нет На сервере в .env нет переменных $SMTP_*.
Письма в спамеSystem Email Address не на подтверждённом домене.

Частые вопросы

Где в Craft CMS настройки почты?

В панели управления: Settings → Email (/admin/settings/email). Выберите SMTP в поле Transport Type — появятся поля Hostname, Port, Use authentication, Username и Password. Значения сохраняются в project config и переезжают вместе с деплоем.

Где выбрать TLS или SSL в настройках SMTP?

Нигде: в Craft 5 такой настройки нет, а в Craft 4 её убрали в версии 4.3.7. На порту 465 шифрование включается с первого байта, на любом другом соединение поднимается через STARTTLS, если сервер его предлагает. Указывайте 587 и не ищите пропавшее поле.

Как не хранить пароль SMTP в project config?

Впишите в поле Password не сам пароль, а ссылку на переменную окружения — $SMTP_PASSWORD, а переменную определите в .env. В project config тогда попадает только ссылка, и её безопасно коммитить.

Как проверить отправку почты в Craft CMS?

Нажмите Test внизу страницы Settings → Email или выполните php craft mailer/test --to=you@example.ru. Консольная команда использует сохранённые настройки и выводит ошибку целиком — это выручает, когда панель показывает только короткое сообщение.

Почему Craft не подключается на порту 8465?

Транспорт SMTP в Craft шифрует соединение с первого байта, только если порт ровно 465; на любом другом он начинает открытым текстом и ждёт STARTTLS. Если хостинг блокирует 587, используйте 8587 — он работает так же, как 587.

Почему письма из Craft попадают в спам?

Проверьте System Email Address в Settings → Email. Это адрес отправителя для всего, что отправляет Craft, включая активацию аккаунта и восстановление пароля, и он должен быть на подтверждённом домене, чтобы DKIM, SPF и DMARC сходились.

Что дальше