在视图中覆盖settings.py电子邮件设置

时间:2019-06-16 06:23:00

标签: django

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

settings.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),我认为做到这一点的最佳方法如下:

views.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)

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

谢谢!

1 个答案:

答案 0 :(得分:1)

您正在做的事情应该可以,但是不建议您alter settings at runtime

您可以在调用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()

请参阅附件的文档链接以获取更多信息。