1
0
Fork 1
mirror of https://github.com/coddingtonbear/django-mailbox.git synced 2026-07-09 22:38:19 +02:00
This commit is contained in:
Adam Dobrawy 2018-04-03 08:24:32 +00:00 committed by GitHub
commit fc55312b3e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 88 additions and 4 deletions

3
.gitignore vendored
View file

@ -11,4 +11,5 @@ include/*
dummy_project/*
.cache/
.tox/
messages
/messages

View file

@ -347,7 +347,6 @@ class Mailbox(models.Model):
msg = Message()
msg._email_object = message
settings = utils.get_settings()
if settings['store_original_message']:
self._process_save_original_message(message, msg)
msg.mailbox = self
@ -387,10 +386,14 @@ class Mailbox(models.Model):
def _process_save_original_message(self, message, msg):
settings = utils.get_settings()
if six.PY3:
content = message.as_string().encode('ascii', 'surrogateescape')
else:
content = message.as_string()
if settings['compress_original_message']:
with NamedTemporaryFile(suffix=".eml.gz") as fp_tmp:
with gzip.GzipFile(fileobj=fp_tmp, mode="w") as fp:
fp.write(message.as_string().encode('utf-8'))
fp.write(content)
msg.eml.save(
"%s.eml.gz" % (uuid.uuid4(), ),
File(fp_tmp),
@ -400,7 +403,7 @@ class Mailbox(models.Model):
else:
msg.eml.save(
'%s.eml' % uuid.uuid4(),
ContentFile(message.as_string()),
ContentFile(content),
save=False
)

View file

@ -0,0 +1,46 @@
Return-path: <SRS0=HZOvtU=DM=REDACTED@porady.REDACTED>
Envelope-to: sprawa-1418@porady.REDACTED
Delivery-date: Sat, 16 Dec 2017 16:22:42 +0100
Received: from mx1.wp.pl ([212.77.101.6])
by s50.hekko.net.pl with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256)
(Exim 4.89) (envelope-from <REDACTED@wp.pl>) id 1eQEII-0005Fu-Cs
for sprawa-1418@porady.REDACTED; Sat, 16 Dec 2017 16:22:42 +0100
Received: (wp-smtpd smtp.wp.pl 33592 invoked from network);
16 Dec 2017 16:22:11 +0100
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wp.pl; s=1024a;
t=1513437731; bh=6Ox0FVna7vMxBu5CbF0s6HvpkNalENwSSgDxNJ/Rsdc=;
h=From:To:Subject;
b=QnrdNDBDNLuENN9QS0Pvn85/bDE1Fc6jJrvKUdnApFrykwzbHxXxCG4qX7g3sS3Qj
xxHGNf8UXZh3zyCln2EZpUD03LgkppMpTbv3tLKA4HSnaT7txr6AWHq2y8A/YQo7EY
2806CYWtFCKYoVolzDN9lctM2nEoZpD5jOVZqYsM=
Received: from public-gprs394416.centertel.pl (HELO REDACTED)
(REDACTED@wp.pl@[37.47.171.241]) (envelope-sender <REDACTED@wp.pl>)
by smtp.wp.pl (WP-SMTPD) with SMTP
for <REDACTED@sejm.pl>; 16 Dec 2017 16:22:11 +0100
Message-ID: <BD6D8EECA3A74E9A9ABD7A1EEA593F76@REDACTED>
From: <REDACTED@wp.pl>
To: <sprawa-1418@porady.REDACTED>
Subject: =?windows-1250?Q?Do_czego_te=BF_s=B9_zdolni_Polscy_s=EAdziowie_..._?=
Date: Sat, 16 Dec 2017 16:21:04 +0100
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_NextPart_000_0018_01D37689.E058CEF0"
X-Spam-Status: No, message_size=7331926 larger than 200K
To jest wielocz<63>ciowa wiadomo<6D><6F> w formacie MIME.
------=_NextPart_000_0018_01D37689.E058CEF0
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_0019_01D37689.E058CEF0"
------=_NextPart_001_0019_01D37689.E058CEF0
Content-Type: text/plain;
charset="windows-1250"
Content-Transfer-Encoding: quoted-printable
REDACTED
------=_NextPart_001_0019_01D37689.E058CEF0--
------=_NextPart_000_0018_01D37689.E058CEF0--

View file

@ -147,6 +147,40 @@ class TestProcessEmail(EmailMessageTestCase):
u'odpowied\u017a Burmistrza.jpg'
)
def test_message_with_utf8_surrogates(self):
"""Ensure that we properly handle UTF-8 surrogates
The problem observed in Python 3.5. It safes from regress of #159.
"""
email_object = self._get_email_object(
'message_with_utf8_surrogates.eml',
)
mailbox = Mailbox.objects.create()
default_settings = utils.get_settings()
with mock.patch('django_mailbox.utils.get_settings') as get_settings:
altered = copy.deepcopy(default_settings)
altered['store_original_message'] = True
get_settings.return_value = altered
# This call throws the UnicodeEncodeError exception.
msg = mailbox.process_incoming_message(email_object)
self.assertEqual(
msg.subject,
u'Do czego te\u017c s\u0105 zdolni Polscy s\u0119dziowie ... '
)
self.assertEqual(
msg.attachments.count(),
0
)
with open(msg.eml.name, 'rb') as f:
self.assertEqual(f.read(),
self._get_email_as_text('message_with_utf8_surrogates.eml'))
def test_message_get_text_body(self):
message = self._get_email_object('multipart_text.eml')