Насколько я знаю, для писем нет встроенных сигналов, однако вы можете свернуть свое собственное решение.
Я предлагаю вам переопределить свой базовый класс электронной почты и добавить туда логику регистрации.Каждый почтовый класс в 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'
.
Теперь все электронные письма, которые проходят через этот почтовый сервер, будут регистрироваться или выдавать сигнал (в зависимости от того, какой подход вы решите выбрать).