12

我正在使用 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 的电子邮件。有时我会收到来自某个登录用户的电子邮件。这也可能意味着当用户收到从我的网站发送的电子邮件时,它的发送地址与实际用户不同。

应该怎么做才能避免这种情况?

4

1 回答 1

23

Django 仅在任何邮件发送函数传递或空字符串作为发件人地址时使用settings.DEFAULT_FROM_EMAIL。这可以在 中验证。Nonedjango/core/mail.py

当出现未处理的异常时,Django 调用始终使用settings.SERVER_EMAILmail_admins()的函数,并且发送到settings.ADMINS中列出的地址。这也可以在.django/core/mail.pydjango/core/mail.py

Django 本身发送电子邮件的唯一其他地方是如果settings.SEND_BROKEN_LINK_EMAILS为 True,那么 CommonMiddleware 会将邮件发送到settings.MANAGERS中列出的所有地址,并且电子邮件发件人是settings.SERVER_EMAIL

因此,普通用户只有在您致电时才会收到来自您网站的电子邮件send_mail()。因此,始终传递真实地址作为from_mail参数,您将避免用户收到来自settings.SERVER_EMAILsettings.DEFAULT_FROM_EMAIL的电子邮件。

旁注:django-registration 至少是 Django 插件的一个示例,它将从settings.DEFAULT_FROM_EMAIL发送邮件,因此在这种情况下,您需要确保它是正确的电子邮件地址,例如 support@yoursite.com 或网站管理员@yoursite.com。

于 2009-03-03T21:15:14.893 回答