如何在Django中记录所有传出的电子邮件? [英] How can I log all outgoing email in Django?

查看:111
本文介绍了如何在Django中记录所有传出的电子邮件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的Django应用程序发送了相当多的电子邮件,我已经尝试过彻底的测试。不过,在头几个月,我想记录所有发出的电子邮件,以确保一切顺利。有没有Django模块允许我这样做,并通过管理面板显示出去的电子邮件



谢谢。

解决方案

我写了一个自定义的电子邮件后端,将东西记录到模型中。



这是我的后端:

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

来自modules.common.models import *

class LoggingEmailBackend(EmailBackend):

围绕SMTP后端包装,将所有电子邮件记录到数据库
$
def send_messages(self,email_messages):

执行实际记录的帮助方法

with transaction.commit_on_success ():

在email_messages中的email_message:

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


try:
return super(LoggingEmailBackend,self)._ send(
email_message

除了:
email_record.ok = False
return False
finally:
email_record.ok = True
return True

这是模型:

  class email(models.Model):

存储所有发送电子邮件的模型。

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):

管理员管理电子邮件模型

list_display = ['to','subject','ok',]
list_filter = ['ok']
readonly_fields = [ '''''''''''''''''ok']
search_fields = ['subject','body','to']

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

def has_add_permission(self,request):
return False


admin.site.register(Email,EmailAdmin)


My Django application sends out quite a bit of emails and I've tried testing it thoroughly. However, for the first few months, I'd like to log all outgoing emails to ensure that everything is working smoothly. Is there a Django module that allows me to do this and makes the outgoing emails visible through the administration panel

Thanks.

解决方案

I wrote a custom email backend which logs the stuff to a model.

Here's my backend:

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

Here's the model:

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,
    )

Here's my model:

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)

这篇关于如何在Django中记录所有传出的电子邮件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆