Django电子邮件

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

如何避免这种情况?

1个回答

23

Django只有在任何邮件发送函数传递None或空字符串作为发件人地址时才使用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_EMAILsettings.DEFAULT_FROM_EMAIL接收电子邮件。

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


你真是个英雄! - Yahya Yahyaoui

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接