Издает ли Django сигналы при отправке электронных писем? - PullRequest
0 голосов
/ 11 июня 2018

Хотелось бы знать, посылаются ли сигналы при отправке электронного письма с использованием send_mail или send_mass_mail и как их прослушивать.Или я должен сам излучать сигналы.

Мой вариант использования: я хочу регистрироваться всякий раз, когда отправляется электронное письмо.Проблема в том, что я не хочу механически регистрировать отправку электронных писем, поскольку это может быть разбросано по многим частям приложения.

1 Ответ

0 голосов
/ 11 июня 2018

Насколько я знаю, для писем нет встроенных сигналов, однако вы можете свернуть свое собственное решение.

Я предлагаю вам переопределить свой базовый класс электронной почты и добавить туда логику регистрации.Каждый почтовый класс в Django должен иметь метод send_messages, который отвечает за отправку сообщений.Вы можете добавить свою логику регистрации или выдать сигнал из метода.

Например: допустим, у вас 'django.core.mail.backends.smtp.EmailBackend' установлено как EMAIL_BACKEND в settings.py,

, а затем расширьтеэто как:

class LoggedEmailBackend(EmailBackend):

    def send_messages(self, email_messages):
        if not email_messages:
            return
        with self._lock:
            new_conn_created = self.open()
            if not self.connection or new_conn_created is None:
                # We failed silently on open().
                # Trying to send would be pointless.
                return
            num_sent = 0
            for message in email_messages:
                sent = self._send(message)
                if sent:
                    num_sent += 1
                    # DO THE EMAIL LOGGING OR EMIT A SIGNAL HERE.
            if new_conn_created:
                self.close()
        return num_sent

Затем в settings.py установите EMAIL_BACKEND = 'custom.backends.LoggedEmailBackend'.

Теперь все электронные письма, которые проходят через этот почтовый сервер, будут регистрироваться или выдавать сигнал (в зависимости от того, какой подход вы решите выбрать).

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