Как я могу регистрировать всю исходящую электронную почту в Django?

Приложение Django отправляет довольно много писем, и я пробовал тщательно его тестировать. Однако в течение первых нескольких месяцев я хотел бы регистрировать все исходящие письма, чтобы обеспечить бесперебойную работу. Есть ли модуль Django, который позволяет мне это делать, и делает исходящие письма видимыми через панель администрирования

Благодарю.

4 Solutions collect form web for “Как я могу регистрировать всю исходящую электронную почту в 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) 

Django предлагает собственные бэкэнды E-Mail, вы можете написать один по своему усмотрению .

Я не знаю, существует ли модуль, который работает таким образом, но написание пользовательского является куском пирога. Просто создайте отдельную модель и каждый раз, когда вы отправляете электронное письмо, создайте новый экземпляр (используйте специальный метод отправки электронной почты). Затем свяжите эту модель с администратором и бинго.

Поскольку ОП задал вопрос о регистрации, а не о сохранении в БД, вот промежуточное ПО, которое делает это:

 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) 

а затем в вашем settings.py:

 EMAIL_BACKEND = 'whereiputit.LoggingBackend' 
  • Вход в два файла с различными настройками
  • Протокол Python разделен между stdout и stderr
  • Django: как передать индивидуальные настройки на manage.py
  • Корневой регистратор в dictconfig
  • Печать в STDOUT и файл журнала при удалении цветовых кодов ANSI
  • Как вставить новую строку в ведение журнала python?
  • Как настроить ведение журнала в syslog в Python?
  • Можно ли использовать DjExperExceptionReporterFilter с чем-то другим, чем AdminEmailHandler?
  • Python - лучший язык программирования в мире.