¿Cómo puedo registrar todos los correos electrónicos salientes en Django?

Mi aplicación Django envía bastantes correos electrónicos y he intentado probarlos a fondo. Sin embargo, durante los primeros meses, me gustaría registrar todos los correos electrónicos salientes para garantizar que todo funcione correctamente. ¿Existe un módulo Django que me permita hacer esto y haga visibles los correos electrónicos salientes a través del panel de administración?

Gracias.

Escribí un backend de correo electrónico personalizado que registra las cosas en un modelo.

Aquí está mi 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 

Aquí está el modelo:

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

Aquí está mi modelo:

 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) 

Dado que el OP preguntó sobre el registro y no sobre guardar en la base de datos, aquí hay un middleware que hace eso:

 import django.core.mail.backends.smtp import logging logger = logging.getLogger(__name__) # or you could enter a specific logger name class LoggingBackend(django.core.mail.backends.smtp.EmailBackend): def send_messages(self, email_messages): try: for msg in email_messages: logger.info(u"Sending message '%s' to recipients: %s", msg.subject, msg.to) except: logger.exception("Problem logging recipients, ignoring") return super(LoggingBackend, self).send_messages(email_messages) 

y luego en su settings.py:

 EMAIL_BACKEND = 'whereiputit.LoggingBackend' 

Django ofrece backends de correo electrónico personalizados, puede escribir uno por su cuenta .

No sé si existe un módulo que funcione de esta manera, pero escribir uno personalizado es pan comido. Simplemente cree un modelo separado y cada vez que envíe un correo electrónico, cree una nueva instancia (use un método personalizado para el envío de correo electrónico). Luego, vincula este modelo con el administrador y el bingo ..