Штатный почтовый плагин Drupal передаёт письма функции PHP mail(), за которой на большинстве хостингов нет почтового сервера, а там, где есть, письмо уходит без авторизации и не проходит проверки SPF и DKIM. Ниже — как направить почтовую подсистему Drupal в fmailer.
| Параметр | Значение |
|---|---|
| SMTP-хост | smtp.fmailer.ru |
| Порт | 587 |
| Шифрование | STARTTLS (соединение переводится в TLS до авторизации) |
| Логин | Логин SMTP-токена вашего домена |
| Пароль | Пароль этого токена — показывается один раз, при создании |
Давно существующий модуль с формой настроек по адресу /admin/config/system/smtp:
composer require drupal/smtp
drush en smtp -y Вместо заполнения формы переопределите настройки в settings.php, чтобы токен не попал в экспортируемую конфигурацию:
<?php
// settings.php — доступы не должны попадать в экспортируемую конфигурацию.
$config['smtp.settings']['smtp_on'] = TRUE;
$config['smtp.settings']['smtp_host'] = 'smtp.fmailer.ru';
$config['smtp.settings']['smtp_port'] = '587';
$config['smtp.settings']['smtp_protocol'] = 'tls'; // 'tls' = STARTTLS, 'ssl' = порт 465
$config['smtp.settings']['smtp_username'] = getenv('SMTP_USER');
$config['smtp.settings']['smtp_password'] = getenv('SMTP_PASS');
$config['smtp.settings']['smtp_from'] = 'noreply@mail.example.ru';
$config['smtp.settings']['smtp_fromname'] = 'Магазин';settings.php через переменную окружения оставляет токен вне репозитория. Построен на Symfony Mailer и настраивается одной строкой DSN — удобнее, если вы уже знакомы с ним:
composer require drupal/symfony_mailer_lite
drush en symfony_mailer_lite -y<?php
// settings.php — Symfony Mailer Lite настраивается одной строкой DSN.
// Символ @ в логине кодируется как %40.
$config['symfony_mailer_lite.settings']['default_transport'] = 'smtp';
$config['symfony_mailer_lite.transport.smtp']['configuration']['dsn'] =
'smtp://token-login%40mail.example.ru:token-password@smtp.fmailer.ru:587'; Обратите внимание на %40: DSN — это URL, поэтому @ в логине токена нужно закодировать.
В разделе Конфигурация → Система → Основные настройки сайта укажите e-mail на подтверждённом домене. Если Drupal отправляет от одного домена, а DKIM и SPF опубликованы на другом, DMARC не сходится и письма фильтруются.
# Тестовое письмо через почтовую подсистему Drupal
drush php:eval "\Drupal::service('plugin.manager.mail')->mail('system', 'test', 'you@example.ru', 'ru', [], NULL, TRUE);"
# Какой почтовый плагин используется на самом деле
drush config:get system.mail| Симптом | Причина и решение |
|---|---|
| Настройки сохранены, но SMTP не используется | Почтовым плагином владеет другой модуль. Проверьте drush config:get system.mail. |
| Таймаут подключения | Порт заблокирован. Используйте 8587 (tls) или 8465 (ssl). |
| Ошибка авторизации | Неверные логин или пароль токена. |
| Ошибка SSL-рукопожатия | ssl на порту 587 или tls на 465. |
| Письма в спаме | Адрес сайта не на подтверждённом домене. |
| Включены два SMTP-модуля | Они борются за почтовый плагин. Оставьте только один. |
Для Drupal 10 и 11 подойдёт либо SMTP Authentication Support (drupal/smtp) — давно существующий вариант с простой формой настроек, либо Symfony Mailer Lite, который использует Symfony Mailer и настраивается одной строкой DSN. Оба работают, но включать одновременно нельзя: каждый переопределяет почтовый плагин.
Посмотрите вывод drush config:get system.mail. Почтовым плагином может владеть другой модуль — Mime Mail, Swift Mailer или остаток от прежней настройки, — и тогда параметры модуля SMTP просто не читаются. На один ключ может быть только один активный плагин.
В settings.php, читая его из переменной окружения, а не в форме настроек модуля. Введённые в форму значения попадают в конфигурацию, которую обычно экспортируют в код и коммитят — то есть доступы оказываются в репозитории.
tls вместе с портом 587: в этом модуле tls означает STARTTLS. ssl вместе с портом 465 — шифрование с первого байта. Несовпадение этих двух параметров и есть самая частая причина ошибки подключения.
Обычно из-за адреса сайта. Drupal берёт его из основных настроек, где нередко остаётся адрес на другом домене. Укажите адрес на подтверждённом домене, чтобы подпись DKIM и запись SPF сходились с отправителем.
Включите отладку в настройках модуля SMTP и посмотрите сообщения на странице /admin/reports/dblog. Выключите её сразу после того, как подключение заработает: в отладочный журнал попадает и обмен при авторизации.