forked from mirror/django-mailbox
Merge remote-tracking branch 'ad-m/master' into 44_store_original_email
This commit is contained in:
commit
440f31174f
5 changed files with 78 additions and 6 deletions
20
django_mailbox/migrations/0002_add_eml_to_message.py
Normal file
20
django_mailbox/migrations/0002_add_eml_to_message.py
Normal 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,
|
||||
),
|
||||
]
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue