首页 > 解决方案 > 在视图中覆盖 settings.py 电子邮件设置

问题描述

发布请求使用的电子邮件设置需要取决于我认为的逻辑。因此,我想在我的视图中覆盖以下电子邮件设置,这些设置通常在 settings.py 中设置:

设置.py

EMAIL_HOST_USER = 'user@website.com'
EMAIL_HOST_PASSWORD = '****************'
DEFAULT_FROM_EMAIL = 'user@website.com'
SERVER_EMAIL = 'user@website.com'

根据我的阅读(https://docs.djangoproject.com/en/2.1/topics/settings/#using-settings-without-setting-django-settings-module),我相信最好的方法如下:

视图.py

from django.conf import settings

def myview(request):

    profile = ..logic that grab's user's profile...

    settings.configure(EMAIL_HOST_USER = profile.email)
    settings.configure(EMAIL_HOST_PASSWORD = profile.email_password)
    settings.configure(DEFAULT_FROM_EMAIL = profile.email)
    settings.configure(SERVER_EMAIL = profile.email)

你能确认这是最合适的方法吗?

谢谢!

标签: django

解决方案


您所做的应该可以工作,但不建议在运行时更改设置

您可以在调用send_mail()时传递所有这些值,因此无需修改设置。发送电子邮件时只需传递正确的关键字参数。

您还可以使用EmailMessage类进行更多控制。

您可以像这样创建 EmailMessage 的对象:

# from Django docs
from django.core.mail import EmailMessage

email = EmailMessage(
    'Hello',
    'Body goes here',
    'from@example.com',
    ['to1@example.com', 'to2@example.com'],
    ['bcc@example.com'],
    reply_to=['another@example.com'],
    headers={'Message-ID': 'foo'},
)

email.send()

有关更多信息,请参阅文档的附加链接。


推荐阅读