mirror of
https://github.com/coddingtonbear/django-mailbox.git
synced 2026-07-10 06:48:19 +02:00
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, \
|
MaildirTransport, MboxTransport, BabylTransport, MHTransport, \
|
||||||
MMDFTransport, GmailImapTransport
|
MMDFTransport, GmailImapTransport
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -72,6 +71,12 @@ ATTACHMENT_INTERPOLATION_HEADER = getattr(
|
||||||
'X-Django-Mailbox-Interpolate-Attachment'
|
'X-Django-Mailbox-Interpolate-Attachment'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
STORE_ORIGINAL_MESSAGE = getattr(
|
||||||
|
settings,
|
||||||
|
'DJANGO_MAILBOX_STORE_ORIGINAL_MESSAGE',
|
||||||
|
False
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ActiveMailboxManager(models.Manager):
|
class ActiveMailboxManager(models.Manager):
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
|
|
@ -334,6 +339,8 @@ class Mailbox(models.Model):
|
||||||
|
|
||||||
def _process_message(self, message):
|
def _process_message(self, message):
|
||||||
msg = Message()
|
msg = Message()
|
||||||
|
if STORE_ORIGINAL_MESSAGE:
|
||||||
|
msg.eml.save('%s.eml' % uuid.uuid4(), ContentFile(message), save=False)
|
||||||
msg.mailbox = self
|
msg.mailbox = self
|
||||||
if 'subject' in message:
|
if 'subject' in message:
|
||||||
msg.subject = convert_header_to_unicode(message['subject'])[0:255]
|
msg.subject = convert_header_to_unicode(message['subject'])[0:255]
|
||||||
|
|
@ -458,6 +465,12 @@ class Message(models.Model):
|
||||||
null=True,
|
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()
|
objects = models.Manager()
|
||||||
unread_messages = UnreadMessageManager()
|
unread_messages = UnreadMessageManager()
|
||||||
incoming_messages = IncomingMessageManager()
|
incoming_messages = IncomingMessageManager()
|
||||||
|
|
@ -506,6 +519,7 @@ class Message(models.Model):
|
||||||
pre-set it.
|
pre-set it.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
if not message.from_email:
|
||||||
if self.mailbox.from_email:
|
if self.mailbox.from_email:
|
||||||
message.from_email = self.mailbox.from_email
|
message.from_email = self.mailbox.from_email
|
||||||
else:
|
else:
|
||||||
|
|
@ -606,6 +620,8 @@ class Message(models.Model):
|
||||||
|
|
||||||
def get_email_object(self):
|
def get_email_object(self):
|
||||||
""" Returns an `email.message.Message` instance for this message."""
|
""" Returns an `email.message.Message` instance for this message."""
|
||||||
|
if self.eml:
|
||||||
|
return email.message_from_file(self.eml)
|
||||||
body = self.get_body()
|
body = self.get_body()
|
||||||
if six.PY3:
|
if six.PY3:
|
||||||
flat = email.message_from_bytes(body)
|
flat = email.message_from_bytes(body)
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ def get_email_as_text(name):
|
||||||
) as f:
|
) as f:
|
||||||
return f.read()
|
return f.read()
|
||||||
|
|
||||||
|
|
||||||
class EmailMessageTestCase(TestCase):
|
class EmailMessageTestCase(TestCase):
|
||||||
ALLOWED_EXTRA_HEADERS = [
|
ALLOWED_EXTRA_HEADERS = [
|
||||||
'MIME-Version',
|
'MIME-Version',
|
||||||
|
|
@ -30,7 +31,7 @@ class EmailMessageTestCase(TestCase):
|
||||||
self._STRIP_UNALLOWED_MIMETYPES = models.STRIP_UNALLOWED_MIMETYPES
|
self._STRIP_UNALLOWED_MIMETYPES = models.STRIP_UNALLOWED_MIMETYPES
|
||||||
self._TEXT_STORED_MIMETYPES = models.TEXT_STORED_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()
|
super(EmailMessageTestCase, self).setUp()
|
||||||
|
|
||||||
def _get_email_as_text(self, name):
|
def _get_email_as_text(self, name):
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import six
|
||||||
|
|
||||||
from django_mailbox.models import Mailbox, Message
|
from django_mailbox.models import Mailbox, Message
|
||||||
from django_mailbox.tests.base import EmailMessageTestCase
|
from django_mailbox.tests.base import EmailMessageTestCase
|
||||||
|
from django.core.mail import EmailMessage
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['TestProcessEmail']
|
__all__ = ['TestProcessEmail']
|
||||||
|
|
@ -200,3 +201,32 @@ class TestProcessEmail(EmailMessageTestCase):
|
||||||
actual_from = msg.from_header
|
actual_from = msg.from_header
|
||||||
|
|
||||||
self.assertEqual(expected_from, actual_from)
|
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)
|
||||||
|
|
|
||||||
|
|
@ -66,3 +66,8 @@ Settings
|
||||||
* If this is set, it will be read as a number of
|
* If this is set, it will be read as a number of
|
||||||
bytes. Any messages above that size will not be
|
bytes. Any messages above that size will not be
|
||||||
downloaded. ``2000000`` is 2 Megabytes.
|
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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue