我正在使用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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top