1
0
Fork 1
mirror of https://github.com/coddingtonbear/django-mailbox.git synced 2026-07-09 22:38:19 +02:00

Merge remote-tracking branch 'ad-m/master' into 44_store_original_email

This commit is contained in:
Adam Coddington 2015-03-23 19:42:06 -07:00
commit 440f31174f
5 changed files with 78 additions and 6 deletions

View file

@ -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'messages', null=True, verbose_name='Message as a file'),
preserve_default=True,
),
]

View file

@ -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):
@ -334,6 +339,8 @@ class Mailbox(models.Model):
def _process_message(self, message):
msg = Message()
if STORE_ORIGINAL_MESSAGE:
msg.eml.save('%s.eml' % uuid.uuid4(), ContentFile(message), save=False)
msg.mailbox = self
if 'subject' in message:
msg.subject = convert_header_to_unicode(message['subject'])[0:255]
@ -458,6 +465,12 @@ class Message(models.Model):
null=True,
)
eml = models.FileField(
_(u'Message as a file'),
null=True,
upload_to="messages",
help_text=_(u'Original full content of message')
)
objects = models.Manager()
unread_messages = UnreadMessageManager()
incoming_messages = IncomingMessageManager()
@ -506,10 +519,11 @@ class Message(models.Model):
pre-set it.
"""
if self.mailbox.from_email:
message.from_email = self.mailbox.from_email
else:
message.from_email = settings.DEFAULT_FROM_EMAIL
if not message.from_email:
if self.mailbox.from_email:
message.from_email = self.mailbox.from_email
else:
message.from_email = settings.DEFAULT_FROM_EMAIL
message.extra_headers['Message-ID'] = make_msgid()
message.extra_headers['Date'] = formatdate()
message.extra_headers['In-Reply-To'] = self.message_id
@ -606,6 +620,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(self.eml)
body = self.get_body()
if six.PY3:
flat = email.message_from_bytes(body)

View file

@ -19,6 +19,7 @@ def get_email_as_text(name):
) as f:
return f.read()
class EmailMessageTestCase(TestCase):
ALLOWED_EXTRA_HEADERS = [
'MIME-Version',
@ -30,7 +31,7 @@ class EmailMessageTestCase(TestCase):
self._STRIP_UNALLOWED_MIMETYPES = models.STRIP_UNALLOWED_MIMETYPES
self._TEXT_STORED_MIMETYPES = models.TEXT_STORED_MIMETYPES
self.mailbox = Mailbox.objects.create()
self.mailbox = Mailbox.objects.create(from_email='from@example.com')
super(EmailMessageTestCase, self).setUp()
def _get_email_as_text(self, name):

View file

@ -5,6 +5,7 @@ import six
from django_mailbox.models import Mailbox, Message
from django_mailbox.tests.base import EmailMessageTestCase
from django.core.mail import EmailMessage
__all__ = ['TestProcessEmail']
@ -200,3 +201,32 @@ class TestProcessEmail(EmailMessageTestCase):
actual_from = msg.from_header
self.assertEqual(expected_from, actual_from)
def test_message_reply(self):
email_object = EmailMessage('Test subject', # subject
'Test body', # body
'username@example.com', # from
['mr.test32@mail.ru'], # to
)
msg = self.mailbox.record_outgoing_message(email_object.message())
self.assertTrue(msg.outgoing)
actual_from = 'username@example.com'
reply_email_object = EmailMessage('Test subject', # subject
'Test body', # body
actual_from, # from
['mr.test32@mail.ru'], # to
)
reply_msg = msg.reply(reply_email_object)
self.assertEqual(reply_msg.in_reply_to, msg)
self.assertEqual(actual_from, msg.from_header)
reply_email_object.from_email = None
second_reply_msg = msg.reply(reply_email_object)
self.assertEqual(self.mailbox.from_email, second_reply_msg.from_header)

View file

@ -66,3 +66,8 @@ 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