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

Encode message body to bytes prior to reconstituting e-mail message object. Added additional test to ensure that messages can make it the full cycle.

This commit is contained in:
Adam Coddington 2013-06-22 15:06:53 -07:00
parent 9cdb2d9d1b
commit 3ea8689ec0
2 changed files with 37 additions and 1 deletions

View file

@ -394,7 +394,21 @@ class Message(models.Model):
).replace('=\n', '').rstrip('\n')
def get_email_object(self):
return email.message_from_string(self.body)
""" Returns an `email.message.Message` instance for this message.
Note: Python 2.6's version of email.message_from_string requires
bytes and will incorrectly create an e-mail object if a unicode
object is passed-in.
Note that in reality 7-bit ascii *should* be an acceptable encoding
here per RFC-2822 (2.1), but given that `message_from_string` really
only cares that bytes are incoming rather than a unicode object, and
django will dutifully, if you were to edit the message in code or
via the admin, allow you to store unicode characters, returning UTF-8
encoded bytes is probably the safest answer.
"""
return email.message_from_string(self.body.encode('utf-8'))
def delete(self, *args, **kwargs):
for attachment in self.attachments.all():

View file

@ -155,3 +155,25 @@ class TestGetMessage(EmailMessageTestCase):
actual_text,
expected_text
)
class TestMessageGetEmailObject(TestCase):
def test_get_body_properly_handles_unicode_body(self):
with open(
os.path.join(
os.path.dirname(__file__),
'generic_message.eml'
)
) as f:
unicode_body = unicode(f.read())
message = Message()
message.body = unicode_body
expected_body = unicode_body
actual_body = message.get_email_object().as_string()
self.assertEquals(
expected_body,
actual_body
)