Электронная почта Джанго

Я использую 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]. Иногда я получаю электронное письмо от какого-либо зарегистрированного пользователя. Это также может означать, что когда пользователь получает электронное письмо, отправленное с моего веб-сайта, его отправленный адрес отличается от фактического пользователя.

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


person Community    schedule 03.03.2009    source источник


Ответы (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 будет отправлять почту на все адреса, указанные в settings.MANAGERS, и адрес электронной почты отправитель: settings.SERVER_EMAIL.

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

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

person Van Gale    schedule 03.03.2009
comment
Ты герой! - person Yahya Yahyaoui; 29.03.2018