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

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

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

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

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

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

Переменные окружения

.env
EMAIL_TRANSPORT="smtp"
EMAIL_FROM="noreply@mail.example.ru"
EMAIL_SMTP_HOST="smtp.fmailer.ru"
EMAIL_SMTP_PORT=587
EMAIL_SMTP_SECURE=false
EMAIL_SMTP_USER="<логин токена>"
EMAIL_SMTP_PASSWORD="<пароль токена>"

# Из него строятся ссылки в письмах сброса пароля и приглашений
PUBLIC_URL="https://cms.example.ru"
ПеременнаяЗначение
EMAIL_TRANSPORTsmtp
EMAIL_FROMnoreply@mail.example.ru — на подтверждённом домене
EMAIL_SMTP_HOSTsmtp.fmailer.ru
EMAIL_SMTP_PORT587
EMAIL_SMTP_SECUREfalse для 587, true для 465
EMAIL_SMTP_USERЛогин токена вашего домена
EMAIL_SMTP_PASSWORDПароль этого токена
EMAIL_SMTP_NAMEНеобязательно — имя хоста, которое Directus называет в EHLO
⚠
По умолчанию это no-reply@example.com. Все письма Directus, включая письма из Flows, уходят с этого единственного адреса, поэтому он должен быть на подтверждённом домене — иначе DKIM и SPF не сойдутся.

Docker Compose

Те же переменные в блоке environment:

docker-compose.yml
services:
  directus:
    image: directus/directus:11
    environment:
      PUBLIC_URL: "https://cms.example.ru"
      EMAIL_TRANSPORT: "smtp"
      EMAIL_FROM: "noreply@mail.example.ru"
      EMAIL_SMTP_HOST: "smtp.fmailer.ru"
      EMAIL_SMTP_PORT: "587"
      EMAIL_SMTP_SECURE: "false"
      EMAIL_SMTP_USER: "<логин токена>"
      EMAIL_SMTP_PASSWORD: "<пароль токена>"

Письма из Flows

Добавьте во Flow операцию Send Email. У неё есть поля To, Subject, CC, BCC, Reply To и тип тела: WYSIWYG, Markdown или шаблон Liquid из каталога EMAIL_TEMPLATES_PATH. Поля «От кого» нет — отправитель всегда EMAIL_FROM. Для формы обратной связи адрес посетителя ставьте в Reply To.

Проверка

Перезапустите Directus и посмотрите лог: при включённом EMAIL_VERIFY_SETUP (это значение по умолчанию) он проверяет SMTP-подключение при запуске и предупреждает, если оно не удалось. Затем воспользуйтесь восстановлением пароля на странице входа, пригласите пользователя из User Directory или соберите Flow с ручным запуском и операцией Send Email.

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

СимптомПричина и решение
Ничего не отправляется, ошибок SMTP нетEMAIL_TRANSPORT не равен smtp — Directus всё ещё использует sendmail.
Предупреждение о почтовом подключении при запуске Неверные хост, порт, EMAIL_SMTP_SECURE или данные токена.
Таймаут подключения Порт заблокирован. Используйте 8587 с EMAIL_SMTP_SECURE=false или 8465 с true.
535 — ошибка авторизацииНеверный логин или пароль токена.
Ссылка сброса пароля или приглашения не работаетНе задан PUBLIC_URL с публичным адресом.
Письма в спаме или отклоняются В EMAIL_FROM остался no-reply@example.com или другой неподтверждённый домен.

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

Как настроить SMTP в Directus?

Переменными окружения, а не в интерфейсе Data Studio. Задайте EMAIL_TRANSPORT=smtp, затем EMAIL_SMTP_HOST, EMAIL_SMTP_PORT, EMAIL_SMTP_USER, EMAIL_SMTP_PASSWORD и EMAIL_SMTP_SECURE, а для отправителя — EMAIL_FROM, и перезапустите Directus. Без EMAIL_TRANSPORT Directus отправляет через sendmail.

Что ставить в EMAIL_SMTP_SECURE — true или false?

false для порта 587: соединение поднимается через STARTTLS до передачи пароля. true для порта 465, где шифрование включается с первого байта. EMAIL_SMTP_IGNORE_TLS не включайте: он пропускает STARTTLS и отправляет логин и пароль открытым текстом.

Почему письма Directus приходят от no-reply@example.com?

Это значение EMAIL_FROM по умолчанию. Укажите адрес на подтверждённом домене: письмо от example.com не проходит DKIM и SPF, его отклоняют или отправляют в спам.

Почему в письме сброса пароля неправильная ссылка?

Ссылки в письмах восстановления пароля и приглашений Directus строит из PUBLIC_URL. Укажите в нём адрес, по которому Directus доступен из интернета.

Можно ли задать отправителя в операции Send Email во Flows?

Нет. У операции есть поля To, Subject, CC, BCC, Reply To, тип тела (WYSIWYG, Markdown или Template) и само тело, а отправитель всегда берётся из EMAIL_FROM. Чтобы ответ ушёл автору заявки, укажите его адрес в Reply To, а не пытайтесь отправлять от его имени.

Как понять, что Directus подключился к SMTP-серверу?

EMAIL_VERIFY_SETUP включён по умолчанию: при запуске Directus проверяет подключение и пишет предупреждение в лог, если оно не удалось. Посмотрите лог контейнера сразу после перезапуска.

Что дальше