我正在使用Gmail SMTP服务器向我网站的用户发送电子邮件.
这些是我的settings.py中的默认设置
EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST_USER = 'example@example.com' EMAIL_HOST_PASSWORD = 'pwd' EMAIL_PORT = 587 EMAIL_USE_TLS = True SERVER_EMAIL = EMAIL_HOST_USER DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
如果我希望用户发送电子邮件,我将覆盖这些设置并使用Django的电子邮件发送方法发送电子邮件.当系统发生异常时,我会收到来自example@example.com的电子邮件.有时我收到一些登录用户的电子邮件.这也可能意味着当用户收到从我的网站发送的电子邮件时,它的发送地址与实际用户不同.
应该怎么做才能避免这种情况?
Django仅在任何邮件发送函数传递时使用settings.DEFAULT_FROM_EMAILNone
或将空字符串作为发件人地址.这可以通过验证django/core/mail.py
.
当存在未处理的异常时,Django会调用始终使用settings.SERVER_EMAIL的mail_admins()
函数,并且仅发送到settings.ADMINS中列出的地址.这也可以在中进行验证.django/core/mail.py
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发送邮件,因此在这种情况下,您需要确保它是一个正确的电子邮件地址,例如support@yoursite.com或webmaster @ yoursite.com.