django - 发送电子邮件时 Django 会发出信号吗?

标签 django email logging signals

想知道使用 send_mail 或 send_mass_mail 发送电子邮件时是否发出信号以及如何监听它们。 或者我必须自己发出信号。

我的用例是我想在发送电子邮件时进行记录。问题是我不想机械地记录电子邮件的发送,因为这可能分散在应用程序的许多部分。

最佳答案

据我所知,没有内置的电子邮件信号,但是,您可以推出自己的解决方案。

我建议您重写电子邮件后端类并在其中添加日志记录逻辑。 Django 中的每个电子邮件后端类都应该有 send_messages负责发送消息的方法。您可以在那里添加日志逻辑或从该方法发出信号。

例如:假设您有 'django.core.mail.backends.smtp.EmailBackend'设置为您的EMAIL_BACKENDsettings.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/

相关文章:

java - Android 将日志写入文件

java - Eclipse 重构

java - 如何使用系统属性值作为记录器处理程序模式的一部分

php - 电子邮件正文和标题在 Laravel 中不起作用

php - build 中页面的非常简单的订阅表格

python - 将 MailChimp 与 Django 用户工作流集成

python - DRY 调用 serializer.data 不会返回模型的更新实例

HTML 和不同的电子邮件提供商

Django 2 : project root url namespace not working

javascript - 不知道 django 中的 ajax 返回什么数据?