【问题标题】:Django emailDjango 电子邮件
【发布时间】:2010-10-11 02:31:25
【问题描述】:

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

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

【问题讨论】:

    标签: python django email django-email


    【解决方案1】:

    当任何邮件发送函数将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_EMAILsettings.DEFAULT_FROM_EMAIL 的电子邮件。

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

    【讨论】:

    • 你是英雄!
    猜你喜欢
    • 1970-01-01
    • 2018-01-02
    • 2011-10-18
    • 2010-12-20
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 2022-06-25
    • 2016-07-02
    相关资源
    最近更新 更多