python - 如何在 Django 中记录所有外发电子邮件?

标签 python django logging django-email

我的 Django 应用程序发送了相当多的电子邮件,我已经尝试对其进行全面测试。但是,在最初的几个月里,我想记录所有外发电子邮件,以确保一切顺利。是否有 Django 模块允许我执行此操作并通过管理面板显示外发电子邮件

谢谢。

最佳答案

我编写了一个自定义电子邮件后端,用于将内容记录到模型中。

这是我的后端:

from django.core.mail.backends.smtp import *
from django.db import transaction

from modules.common.models import *

class LoggingEmailBackend(EmailBackend):
    """
    A wrapper around the SMTP backend that logs all emails to the DB.
    """
    def send_messages(self, email_messages):
    """
    A helper method that does the actual logging
    """
    with transaction.commit_on_success():

        for email_message in email_messages:

            email_record = Email.objects.create(
                to='; '.join(email_message.recipients()),
                subject=email_message.subject, body=email_message.body,
            )

            try:
                return super(LoggingEmailBackend, self)._send(
                    email_message
                )
            except:
                email_record.ok = False
                return False
            finally:
                email_record.ok = True
                return True

这是模型:

class Email(models.Model):
    """
    Model to store all the outgoing emails.
    """
    when = models.DateTimeField(
        null=False, auto_now_add=True
    )
    to = models.EmailField(
        null=False, blank=False,
    )
    subject = models.CharField(
         null=False, max_length=128,
    )
    body = models.TextField(
        null=False, max_length=1024,
    )
    ok = models.BooleanField(
        null=False, default=True,
    )

这是我的模型:

from django.contrib import admin

from modules.common.models import *

class EmailAdmin(admin.ModelAdmin):
    """
    Admin part for managing the the Email model
    """
    list_display = ['to', 'subject', 'ok',]
    list_filter = ['ok']
    readonly_fields = ['when', 'to', 'subject', 'body', 'ok']
    search_fields = ['subject', 'body', 'to']

    def has_delete_permission(self, request, obj=None):
        return False

    def has_add_permission(self, request):
        return False


admin.site.register(Email, EmailAdmin)

关于python - 如何在 Django 中记录所有外发电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552283/

相关文章:

python - matplotlib 等高线图 : warning about `no contour levels were found`

python - 涉及 scipy 颂歌的钟摆

python - 普通方法还是属性?

python - Django 应用程序尚未加载 Celery 任务

python - logservice.fetch() 不返回任何内容

python - 从 html %20 中转义

python - 在Python中实例化静态变量

python - celery 用作代理时能否优雅地承受 mongodb 故障转移?

java - Maven/Sonar : Enforce usage of slf4j over different logging frameworks

android - 如何随时随地保存 Android 日志