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

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

Почтовый плагин в Strapi включён по умолчанию, но работает через провайдер sendmail, которому нужен почтовый сервер на той же машине. Официальный провайдер Nodemailer отправляет восстановление пароля, подтверждение регистрации и ваши собственные письма через fmailer.

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

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

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

Установка провайдера

bash
npm install @strapi/provider-email-nodemailer

Настройка почтового плагина

Логин и пароль держите в переменных окружения:

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

Затем подключите провайдер к плагину. В проекте на JavaScript тот же блок пишется в config/plugins.js через module.exports:

config/plugins.tsjavascript
export default ({ env }) => ({
  email: {
    config: {
      provider: "nodemailer",
      providerOptions: {
        host: env("SMTP_HOST"),
        port: env.int("SMTP_PORT", 587),
        secure: false, // STARTTLS на 587; true для 465
        auth: {
          user: env("SMTP_USERNAME"),
          pass: env("SMTP_PASSWORD"),
        },
      },
      settings: {
        defaultFrom: "Магазин <noreply@mail.example.ru>",
        defaultReplyTo: "support@mail.example.ru",
      },
    },
  },
});

Адрес в defaultFrom должен быть на подтверждённом домене, иначе DKIM и SPF не сойдутся с отправителем. После изменения файла перезапустите Strapi.

Отправитель в Users & Permissions

Письма восстановления пароля и подтверждения адреса не используют defaultFrom. Откройте Settings → Users & Permissions plugin → Email templates и поправьте оба шаблона:

ПолеЗначение
Shipper nameНазвание вашего сервиса
Shipper emailnoreply@mail.example.ru — на подтверждённом домене
Response emailНеобязательно, например support@mail.example.ru
⚠
Оба шаблона изначально отправляют с адреса на домене самого Strapi. Если его не поменять, письма восстановления и подтверждения уходят от имени чужой компании и не проходят DMARC у получателя.

Отправка из кода

javascript
// В контроллере, сервисе или lifecycle-хуке
await strapi.plugin("email").service("email").send({
  to: order.customerEmail,
  subject: `Подтверждение заказа №${order.id}`,
  text: "Заказ принят. Доставка — завтра до 18:00.",
  html: "<p>Заказ принят. Доставка — завтра до 18:00.</p>",
});

Проверка

В админке откройте Settings и в разделе Email plugin — страницу настроек. Там виден активный провайдер и есть кнопка Send test email. Затем запросите восстановление пароля для тестового пользователя, чтобы проверить и отправителя Users & Permissions.

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

СимптомПричина и решение
На странице настроек по-прежнему sendmail Конфигурация не внутри email.config или Strapi не перезапущен.
Провайдер не загружается при запуске В проекте не установлен @strapi/provider-email-nodemailer.
Тест проходит, восстановление пароля — нет В шаблонах Users & Permissions остался no-reply@strapi.io.
Invalid login: 535Неверный логин или пароль токена в .env.
Таймаут подключения Порт заблокирован. Используйте 8587 с secure: false или 8465 с secure: true.
Письма в спамеОдин из адресов отправителя не на подтверждённом домене.

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

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

Установите @strapi/provider-email-nodemailer и укажите у плагина email провайдер nodemailer в config/plugins.js или config/plugins.ts, а в providerOptions — host, port, secure и auth. По умолчанию Strapi использует провайдер sendmail, которому нужен локальный почтовый сервер, а его на большинстве хостингов нет.

Почему письма восстановления пароля приходят от no-reply@strapi.io?

У плагина Users & Permissions свой отправитель для шаблонов Reset password и Email address confirmation, и по умолчанию это no-reply@strapi.io — defaultFrom из config/plugins его не переопределяет. Поменяйте Shipper email в обоих шаблонах на адрес на подтверждённом домене, иначе релей отклонит письмо или получатель сочтёт его поддельным.

Как отправить тестовое письмо из Strapi?

В админке откройте Settings и в разделе Email plugin — страницу настроек. Там виден активный провайдер и есть кнопка Send test email. Тест использует defaultFrom, поэтому может пройти, даже если письма Users & Permissions по-прежнему уходят со своего отправителя.

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

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

Как отправить письмо из кода Strapi?

Вызовите strapi.plugin('email').service('email').send() с полями to, subject, text и html в контроллере, сервисе или lifecycle-хуке. from и replyTo необязательны и берутся из настроек config/plugins. Оборачивайте вызов в try/catch: неудачная отправка выбрасывает исключение.

Куда ведёт ссылка в письме восстановления пароля?

На адрес из Settings → Users & Permissions plugin → Advanced settings → Reset password page. Своей публичной страницы сброса пароля для пользователей у Strapi нет — укажите страницу фронтенда, которая принимает код и задаёт новый пароль.

Что дальше