题
我正在使用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的电子邮件。有时我收到一些登录用户的电子邮件。这也可能意味着当用户收到从我的网站发送的电子邮件时,它的发送地址与实际用户不同。
应该采取什么措施来避免这种情况?
解决方案
当任何邮件发送功能将 None
或空字符串作为发件人地址传递时,Django仅使用 settings.DEFAULT_FROM_EMAIL 。这可以在 django / core / mail.py
中验证。
当存在未处理的异常时,Django会在 django / core / mail.py
中调用 mail_admins()
函数,该函数始终使用 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 发送邮件,因此在这种情况下,您需要确保它是一封正确的电子邮件地址如support@yoursite.com或webmaster@yoursite.com。