From 42d891bd8d1ff6e71eeac1909449432c3fff008b Mon Sep 17 00:00:00 2001 From: Adam Dobrawy Date: Sun, 15 Mar 2015 02:16:27 +0100 Subject: [PATCH] Added storing original message in file --- .../migrations/0002_add_eml_to_message.py | 20 +++++++++++++++++++ django_mailbox/models.py | 16 ++++++++++++++- docs/topics/appendix/settings.rst | 4 ++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 django_mailbox/migrations/0002_add_eml_to_message.py diff --git a/django_mailbox/migrations/0002_add_eml_to_message.py b/django_mailbox/migrations/0002_add_eml_to_message.py new file mode 100644 index 0000000..c7a5f91 --- /dev/null +++ b/django_mailbox/migrations/0002_add_eml_to_message.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('django_mailbox', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='message', + name='eml', + field=models.FileField(help_text='Original full content of message', upload_to=b'', null=True, verbose_name='Message as a file'), + preserve_default=True, + ), + ] diff --git a/django_mailbox/models.py b/django_mailbox/models.py index 7e93c14..3318e7a 100644 --- a/django_mailbox/models.py +++ b/django_mailbox/models.py @@ -32,7 +32,6 @@ from django_mailbox.transports import Pop3Transport, ImapTransport, \ MaildirTransport, MboxTransport, BabylTransport, MHTransport, \ MMDFTransport, GmailImapTransport - logger = logging.getLogger(__name__) @@ -72,6 +71,12 @@ ATTACHMENT_INTERPOLATION_HEADER = getattr( 'X-Django-Mailbox-Interpolate-Attachment' ) +STORE_ORIGINAL_MESSAGE = getattr( + settings, + 'DJANGO_MAILBOX_STORE_ORIGINAL_MESSAGE', + False +) + class ActiveMailboxManager(models.Manager): def get_queryset(self): @@ -326,6 +331,8 @@ class Mailbox(models.Model): def _process_message(self, message): msg = Message() + if STORE_ORIGINAL_MESSAGE: + msg.eml.save('message.eml', ContentFile(message), save=False) msg.mailbox = self if 'subject' in message: msg.subject = convert_header_to_unicode(message['subject'])[0:255] @@ -450,6 +457,11 @@ class Message(models.Model): null=True, ) + eml = models.FileField( + _(u'Message as a file'), + null=True, + help_text=_(u'Original full content of message') + ) objects = models.Manager() unread_messages = UnreadMessageManager() incoming_messages = IncomingMessageManager() @@ -599,6 +611,8 @@ class Message(models.Model): def get_email_object(self): """ Returns an `email.message.Message` instance for this message.""" + if self.eml: + return email.message_from_file(Message.objects.last().eml) body = self.get_body() if six.PY3: flat = email.message_from_bytes(body) diff --git a/docs/topics/appendix/settings.rst b/docs/topics/appendix/settings.rst index 290e884..7a2e573 100644 --- a/docs/topics/appendix/settings.rst +++ b/docs/topics/appendix/settings.rst @@ -66,3 +66,7 @@ Settings * If this is set, it will be read as a number of bytes. Any messages above that size will not be downloaded. ``2000000`` is 2 Megabytes. +* ``DJANGO_MAILBOX_STORE_ORIGINAL_MESSAGE`` + * Default: ``False`` + * Type: ``boolean`` + * Controls whether or not we store original messages in ``eml`` field