Skip to main content

Зачем нужен SMTP

Email-уведомления используются в Cabinet для:
  • Верификации email при регистрации
  • Сброса пароля
  • Уведомлений о платежах, подписках, автопродлении
  • Реферальных бонусов и партнёрских заявок
  • Заявок на вывод средств
Начиная с v3.65.0 на почту доходит гораздо больше: пользователи без Telegram (зарегистрированные в кабинете по email) получают письмами весь жизненный цикл подписки — winback-письма, уведомления от вебхуков Remnawave (WEBHOOK_*), результат автопродления и промопредложения. Раньше эти сценарии существовали только в Telegram, и email-пользователи их просто не видели.
Email работает только при CABINET_ENABLED=true. Без Cabinet настройка SMTP не требуется.

Транзакционные и маркетинговые письма

Разделение важно: от маркетинговых писем можно отписаться, от транзакционных — нет.
Тумблеры news_enabled и promo_offers_enabled из настроек пользователя в кабинете действуют и на email тоже (v4.1.0). Раньше они фильтровали только Telegram-рассылку, и выключенные новости всё равно приходили на почту.

Отписка от маркетинговых писем

One-click unsubscribe по RFC 8058 (v4.1.0): заголовок List-Unsubscribe и ссылка в футере письма.
Gmail и Yahoo требуют one-click unsubscribe от массовых отправителей. Без него единственный способ прекратить письма — кнопка «Спам», а она бьёт по репутации домена.
Как это устроено:
  • ссылка содержит HMAC-токен <user_id>.<category>.<подпись> на секрете кабинета;
  • адрес входит в подпись, но не в саму ссылку — не утекает в Referer и логи прокси, а смена почты обесценивает старые ссылки;
  • срока жизни у ссылки нет: письмо могут открыть через год;
  • эндпоинт /cabinet/public/unsubscribe доступен без авторизации, отписка применяется только по POST.
EMAIL_UNSUBSCRIBE_BASE_URL указывайте явно, если API кабинета проксируется не через /api.

Reply-To

Нужен, когда SMTP_FROM_EMAIL живёт на поддомене без MX-записи — типичная схема Resend и SES (noreply@mail.example.com). Ответ клиента на такое письмо просто отбивается, и обращение до вас не доходит. Пусто — заголовок не ставится.

Варианты настройки

Проверка доступности почтовых портов

Многие хостеры блокируют исходящие почтовые порты. Проверьте до начала настройки.

Проверка порта 25 (SMTP)

Проверка порта 587 (Submission/STARTTLS)

Проверка порта 465 (SMTPS/SSL)

Интерпретация результатов

Если порт 25 заблокирован — свой Postfix не сможет доставлять почту напрямую. Используйте relay через внешний SMTP (порт 587) или обратитесь к хостеру для разблокировки.

Проверка наличия обратной DNS-записи (PTR)

Если PTR-запись пустая или не совпадает с вашим доменом — многие почтовые серверы будут отклонять письма. Настройте PTR через панель хостера.

Вариант 1: Внешний SMTP (рекомендуется)

Yandex 360

  1. Подключите домен к Yandex 360 для бизнеса
  2. Создайте почтовый ящик (например, noreply@yourdomain.com)
  3. Сгенерируйте пароль приложения: Yandex ID → Безопасность → Пароли приложений
Лимит Yandex 360: 500 писем в сутки на бесплатном тарифе.

Gmail

  1. Включите двухфакторную аутентификацию в Google-аккаунте
  2. Создайте пароль приложения: myaccount.google.com/apppasswords
Лимит Gmail: 500 писем в сутки для обычного аккаунта, 2000 для Google Workspace.

Mailgun / Brevo / Resend

Для массовых рассылок используйте транзакционные email-сервисы:

Вариант 2: Свой Postfix

Требования

  • Чистый IP-адрес (не в спам-листах)
  • PTR-запись, совпадающая с доменом
  • Открытый порт 25 (исходящий)
  • Выделенный домен для почты

Шаг 1: Установка Postfix

При установке выберите Internet Site и укажите ваш домен (например, mail.yourdomain.com).

Шаг 2: Настройка Postfix

Основные параметры:
Перезапустите:

Шаг 3: DNS-записи

Добавьте в DNS вашего домена:

MX-запись

A-запись для почтового сервера

SPF-запись

SPF указывает, какие серверы имеют право отправлять почту от имени домена.
-all означает строгий режим: письма с других IP будут отклоняться.

Проверка SPF

Шаг 4: DKIM (подпись писем)

DKIM подписывает каждое письмо криптографическим ключом, подтверждая что оно отправлено вашим сервером.
Создайте директории и ключи:
Настройте OpenDKIM:
Подключите OpenDKIM к Postfix:
Добавьте в конец:
Перезапустите сервисы:
Добавьте DKIM DNS-запись. Посмотрите публичный ключ:
Скопируйте содержимое и добавьте TXT-запись:

Проверка DKIM

Шаг 5: DMARC

DMARC объединяет SPF и DKIM, указывая получателям что делать с неподтверждёнными письмами.
Рекомендация: начните с p=none для мониторинга, затем переключите на p=quarantine.

Проверка DMARC

Шаг 6: Настройка .env бота

При использовании локального Postfix аутентификация не нужна (SMTP_USER и SMTP_PASSWORD оставьте пустыми). TLS отключён, т.к. подключение локальное.

Postfix в Docker

Если бот запущен в Docker, у него нет доступа к localhost хоста. Варианты: Вариант A: host network Добавьте в docker-compose.yml для сервиса бота:
В .env:
Вариант B: Postfix в контейнере
docker-compose.postfix.yml
В .env:

Тестирование

Отправка тестового письма через командную строку

Отправка через SMTP напрямую

Проверка логов Postfix

Проверка через бота

После настройки SMTP перезапустите бота и проверьте:
  1. Откройте Cabinet
  2. Зарегистрируйтесь по email
  3. Проверьте что письмо верификации пришло
Если письмо не пришло — проверьте логи бота и логи Postfix.

Проверка доставляемости

Онлайн-сервисы

Отправьте тестовое письмо и проверьте оценку:
  • mail-tester.com — оценка от 0 до 10, проверяет SPF/DKIM/DMARC, контент, блеклисты
  • mxtoolbox.com — проверка DNS-записей, блеклистов, SMTP-сервера

Проверка IP в спам-листах

Чтобы получить reversed IP: 1.2.3.44.3.2.1.

Проверка DNS-записей

Чеклист

Перед запуском в продакшн убедитесь:
  • Порты 25/587 открыты (исходящие)
  • PTR-запись настроена и совпадает с myhostname
  • MX-запись указывает на почтовый сервер
  • SPF-запись добавлена (v=spf1 ip4:... -all)
  • DKIM настроен и DNS-запись добавлена
  • DMARC-запись добавлена (начните с p=none)
  • IP сервера нет в спам-листах
  • Тестовое письмо доставляется в inbox (не в спам)
  • CABINET_ENABLED=true в .env бота
  • SMTP_* переменные заполнены в .env бота
  • Письмо верификации из Cabinet приходит