Переопределение settings.py настроек электронной почты в представлении - PullRequest
1 голос
/ 16 июня 2019

Настройки электронной почты, которые используются в почтовом запросе, должны зависеть от логики в моем представлении.В результате я хотел бы переписать следующие параметры электронной почты в моем представлении, которые обычно задаются в 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 Ответ

1 голос
/ 16 июня 2019

То, что вы делаете, должно работать, но не рекомендуется изменять настройки во время выполнения .

Вы можете передать все эти значения при вызове 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()

См. Прикрепленные ссылки на документы для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...