From e2f3f7a6922d8ca0365e93e03ab170d1ab1d575e Mon Sep 17 00:00:00 2001 From: Folker Bernitt Date: Thu, 12 Mar 2015 17:02:50 +0100 Subject: Fixed problem with multi line content type header field. - Bugfix - Issues #313, #322 --- service/pixelated/adapter/model/mail.py | 2 +- service/test/unit/adapter/test_mail.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/service/pixelated/adapter/model/mail.py b/service/pixelated/adapter/model/mail.py index 8521babf..c11b2aa3 100644 --- a/service/pixelated/adapter/model/mail.py +++ b/service/pixelated/adapter/model/mail.py @@ -82,7 +82,7 @@ class Mail(object): def _parse_charset_header(self, charset_header, default_charset='utf-8'): try: - return re.compile('.*charset=([a-zA-Z0-9-]+)').match(charset_header).group(1) + return re.compile('.*charset=([a-zA-Z0-9-]+)', re.MULTILINE | re.DOTALL).match(charset_header).group(1) except: return default_charset diff --git a/service/test/unit/adapter/test_mail.py b/service/test/unit/adapter/test_mail.py index 7bbf4cd4..317db5de 100644 --- a/service/test/unit/adapter/test_mail.py +++ b/service/test/unit/adapter/test_mail.py @@ -184,6 +184,17 @@ class TestPixelatedMail(unittest.TestCase): self.assertEquals(u'H\xe4llo', mail.text_plain_body) self.assertEquals(u'

H\xe4llo

', mail.html_body) + def test_multi_line_content_type_header_is_supported(self): + plain_headers = {'Content-Type': 'text/plain;\ncharset=iso-8859-1', 'Content-Transfer-Encoding': 'quoted-printable'} + html_headers = {'Content-Type': 'text/html;\ncharset=utf-8', 'Content-Transfer-Encoding': 'quoted-printable'} + parts = {'alternatives': [{'content': 'H=E4llo', 'headers': plain_headers}, {'content': '

H=C3=A4llo

', 'headers': html_headers}]} + + mail = PixelatedMail.from_soledad(None, None, self._create_bdoc(raw='some raw body'), parts=parts, soledad_querier=None) + + self.assertEqual(2, len(mail.alternatives)) + self.assertEquals(u'H\xe4llo', mail.text_plain_body) + self.assertEquals(u'

H\xe4llo

', mail.html_body) + def test_clean_line_breaks_on_address_headers(self): many_recipients = 'One ,\nTwo , Normal ,\nalone@mail.com' headers = {'Cc': many_recipients, -- cgit v1.2.3