Как иметь несколько почтовых бэкендов в 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
Вернуться на верх