Как иметь несколько почтовых бэкендов в Django?
Я хотел бы иметь как SMTP backend, так и консольный backend, чтобы я мог отправить письмо по SMTP и одновременно вывести сгенерированное письмо на консоль.
В моем файле settings.py я хотел бы иметь что-то вроде этого:
EMAIL_BACKEND = ["django.core.mail.backends.smtp.EmailBackend", "django.core.mail.backends.console.EmailBackend"]
К сожалению, Django поддерживает только один почтовый бэкенд одновременно, поэтому предоставить список бэкендов не получится.
Но вы можете создать свой собственный EmailBackend следующим образом:
from django.core.mail.backends.base import BaseEmailBackend
from django.core.mail.backends.console import EmailBackend as ConsoleBackend
from django.core.mail.backends.smtp import EmailBackend as SMTPBackend
class CustomEmailBackend(BaseEmailBackend):
def __init__(self, *args, **kwargs):
self.smtp_backend = SMTPBackend(*args, **kwargs)
self.console_backend = ConsoleBackend(*args, **kwargs)
def send_messages(self, email_messages):
smtp_count = self.smtp_backend.send_messages(email_messages)
console_count = self.console_backend.send_messages(email_messages)
# Maybe some validation
# assert smtp_count == console_count, 'SMTP and Console sent different amount of emails'
return smtp_count