Skip to content

Email configuration ru

Alex edited this page Oct 26, 2026 · 1 revision

Отдельная отправка почты Commentail

English · Русский

Доступно с версии 1.4.0. Более ранние версии используют общую почтовую конфигурацию Django. В 1.4.0 для Commentail можно выбрать другой backend, параметры подключения и отправителя, сохранив обычную почту сайта на существующих настройках.

Справочник настроек

Добавьте COMMENTAIL_EMAIL в настройки Django своего проекта. Это отдельный общий для проекта словарь вне COMMENTAIL, без секций по hostname и полей в админке Wagtail. Он применяется ко всем типам писем Commentail.

Ключ По умолчанию Назначение
BACKEND None Путь импорта класса почтового backend Django. None или отсутствие ключа использует общий EMAIL_BACKEND.
OPTIONS {} Именованные аргументы конструктора явно заданного BACKEND. Непустой словарь требует явного пути backend.
FROM_EMAIL None Непустой адрес отправителя, при желании с отображаемым именем. None или отсутствие ключа использует DEFAULT_FROM_EMAIL.

Без COMMENTAIL_EMAIL, а также при значении {}, сохраняется общая отправка. Можно изменить только отправителя:

COMMENTAIL_EMAIL = {"FROM_EMAIL": "Comments <comments@example.org>"}

В OPTIONS допустимы только аргументы конструктора выбранного backend. Используйте имена в нижнем регистре: например, SMTP принимает host, а не EMAIL_HOST. Имена параметров backend и fail_silently зарезервированы: Commentail всегда использует fail_silently=False. При ошибке явно выбранного backend автоматического перехода на общую почту нет.

python manage.py check проверяет структуру словаря и импорт backend без создания транспорта и сетевых запросов. Успешная проверка не подтверждает правильность ключей, разрешение отправителя или доставку.

Отдельное SMTP-подключение

Добавьте фрагмент в settings.py проекта, сохранив обычные настройки EMAIL_*. Передайте переменные окружения веб-приложению и фоновым процессам через существующую конфигурацию сервисов или хранилище секретов.

import os

COMMENTAIL_EMAIL = {
    "BACKEND": "django.core.mail.backends.smtp.EmailBackend",
    "OPTIONS": {
        "host": os.environ["COMMENTAIL_SMTP_HOST"],
        "port": 587,
        "username": os.environ["COMMENTAIL_SMTP_USERNAME"],
        "password": os.environ["COMMENTAIL_SMTP_PASSWORD"],
        "use_tls": True,
        "use_ssl": False,
        "timeout": 20,
    },
    "FROM_EMAIL": os.environ["COMMENTAIL_FROM_EMAIL"],
}

В COMMENTAIL_FROM_EMAIL задайте разрешённого провайдером отправителя, например Comments <comments@example.org>. Используйте реальные SMTP-сервер и учётные данные провайдера. Для неявного TLS укажите его порт (обычно 465), use_ssl=True и use_tls=False. Не включайте оба режима TLS одновременно.

Пропущенные параметры SMTP сохраняют соответствующие значения EMAIL_* Django: одно указание backend не изолирует учётные данные. Для отдельного аккаунта задайте все необходимые поля подключения, включая учётные данные и режимы TLS. Для гостевой формы SMTP требует явный непустой параметр host либо явно настроенный непустой EMAIL_HOST. Значение None для host наследует EMAIL_HOST. Пустой адрес или одни пробелы отключают гостевые формы и не позволяют создать SMTP-транспорт для заданий очереди; ошибка использует прежний лимит повторов. Commentail ограничивает SMTP-тайм-аут половиной срока захвата задания, максимум 30 секундами, сохраняя меньшие значения. Для других backend конечный тайм-аут настраивается их собственными средствами.

Пример HTTP API: Resend через Anymail

Это необязательная интеграция в проекте сайта. Commentail не устанавливает SDK провайдера. В тестовом окружении установите версию, использованную в примере:

python -m pip install django-anymail==15.2

Добавьте "anymail" в существующий INSTALLED_APPS. Сохраните общий SMTP-backend сайта в EMAIL_BACKEND и настройки EMAIL_*, затем добавьте:

import os

COMMENTAIL_EMAIL = {
    "BACKEND": "anymail.backends.resend.EmailBackend",
    "OPTIONS": {
        "api_key": os.environ["COMMENTAIL_RESEND_API_KEY"],
        "requests_timeout": 20,
    },
    "FROM_EMAIL": os.environ["COMMENTAIL_FROM_EMAIL"],
}

Используйте ключ Resend с правом отправки, разрешённого отправителя/домен и получателя, доступного для вашего аккаунта. Пример опирается на backend Resend и документированные параметры экземпляра Anymail. Для других backend используйте их аргументы конструктора или собственные настройки Django: имена параметров SMTP не универсальны.

Храните секреты в переменных окружения или хранилище секретов. Django не загружает .env автоматически; фоновый сервис тоже не получает его автоматически. Не печатайте словари конфигурации и не включайте журналирование сырых запросов провайдера при проверке ключей.

Применение и проверка

Для проверки транспорта явно укажите доступного вам тестового получателя:

python manage.py test_commentail_email --to recipient@example.org

Команда отправляет одно текстовое письмо через выбранные backend и отправителя Commentail. Она не создаёт комментарий, токен, подписку или задание очереди и не обрабатывает ожидающие письма. Отправка выполняется напрямую, даже при выключенной почте Site: это проверка транспорта, а не политики сайта или фонового worker. SMTP-тайм-аут ограничен 30 секундами; другие backend используют собственные настройки тайм-аута. Ошибки показывают только класс исключения, без ответа провайдера и учётных данных. Ненулевой код выхода означает неудачу проверки; повторная попытка может отправить дубликат. Принятие письма backend не подтверждает доставку во входящие: локальный, консольный и dummy-backend тоже могут сообщать о принятии.

  1. Установите commentail==1.4.0 в окружении сайта. Выполните python manage.py check с нужными настройками.
  2. После изменения конфигурации перезапустите веб-приложение и фоновые worker'ы. У них должны совпадать настройки, окружение и база данных.
  3. Проверьте обычное письмо через соответствующую функцию сайта: оно должно использовать прежние общий backend и отправителя.
  4. Отправьте гостевой комментарий и запустите существующий обработчик или python manage.py process_commentail. Проверьте Comments → Email delivery, событие у провайдера, отправителя и ссылку в полученном письме; подтвердите email.
  5. Пройдите полный сценарий уведомлений, включая редактирование, ответы и отписку.

Сохраняются существующая очередь, расписание, повторы, проверки доступа и сроки ссылок. Ожидающие задания используют действующие backend и отправителя во время обработки, в том числе если созданы до изменения настроек. Исправление ключей само по себе не возвращает неудачное задание в обработку: устраните причину и используйте существующее действие повтора, когда оно доступно.

Ошибки провайдера и неверная действующая конфигурация почты используют прежний лимит повторов и освобождают захват задания; в диагностике очереди сохраняется класс исключения без приватного ответа. Статус отправки означает принятие backend, а не доставку во входящие. Проверки с имитацией транспорта или локальным backend не подтверждают реальную доставку. См. решение проблем.

Конфигурация · Почта и обработчик

Clone this wiki locally