Подтвердить что ты не робот

Электронная почта Django

Я использую SMTP-сервер Gmail для отправки электронной почты от пользователей моего веб-сайта.

Это настройки по умолчанию в моих settings.py

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'pwd'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
SERVER_EMAIL = EMAIL_HOST_USER
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

Если я хочу, чтобы пользователь отправил электронное письмо, я переопределяю эти параметры и отправляю электронное письмо с помощью методов отправки электронной почты Django. Когда в системе возникает исключение, я получаю электронное письмо с [email protected] Иногда я получаю электронное письмо от какого-либо зарегистрированного пользователя. Это также может означать, что когда пользователь получает электронное письмо, отправленное с моего сайта, он имеет адрес, отличный от фактического пользователя.

Что нужно сделать, чтобы избежать этой ситуации?

4b9b3361

Ответ 1

Django использует только settings.DEFAULT_FROM_EMAIL, когда любая из функций отправки почты проходит None или пустую строку в качестве адреса отправителя. Это можно проверить в django/core/mail.py.

Когда есть необработанное исключение, Django вызывает функцию mail_admins() в django/core/mail.py, которая всегда использует settings.SERVER_EMAIL и только, отправленную по адресам, указанным в settings.ADMINS. Это также можно проверить в django/core/mail.py.

Единственное другое место, которое Django отправляет по электронной почте, это если settings.SEND_BROKEN_LINK_EMAILS - True, то CommonMiddleware отправит почту всем адресам, указанным в настройках . MANAGERS и отправитель электронной почты имеет settings.SERVER_EMAIL.

Следовательно, единственный раз, когда обычный пользователь будет получать электронную почту с вашего сайта, вы вызываете send_mail(). Таким образом, всегда передавайте реальный адрес в качестве аргумента from_mail, и вы избегаете использования пользователями электронной почты из settings.SERVER_EMAIL или . DEFAULT_FROM_EMAIL.

Боковое примечание: django-registration - это хотя бы один пример подключаемого Django, который будет отправлять почту из настроек .DEFAULT_FROM_EMAIL, поэтому в таких случаях вам нужно убедиться, что это правильный адрес электронной почты адрес, такой как [email protected] или [email protected]