想知道使用 send_mail 或 send_mass_mail 发送电子邮件时是否发出信号以及如何监听它们。 或者我必须自己发出信号。
我的用例是我想在发送电子邮件时进行记录。问题是我不想机械地记录电子邮件的发送,因为这可能分散在应用程序的许多部分。
最佳答案
据我所知,没有内置的电子邮件信号,但是,您可以推出自己的解决方案。
我建议您重写电子邮件后端类并在其中添加日志记录逻辑。 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'
。
现在,通过此电子邮件后端的所有电子邮件都将被记录或发出信号(取决于您决定选择哪种方法)。
关于django - 发送电子邮件时 Django 会发出信号吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50794417/