如何在Django中记录所有传出的电子邮件? [英] How can I log all outgoing email in 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屋!
查看全文