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

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

12 голосов | спросил crashekar 3 MarpmTue, 03 Mar 2009 22:40:23 +03002009-03-03T22:40:23+03:0010 2009, 22:40:23

1 ответ


0

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, и пользователи не будут получать электронную почту из настроек .SERVER_EMAIL или settings.DEFAULT_FROM_EMAIL .

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

ответил Van Gale 4 MaramWed, 04 Mar 2009 00:15:14 +03002009-03-04T00:15:14+03:0012 2009, 00:15:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132