From db5a88affdf696b833619d18cbcfdd408f206150 Mon Sep 17 00:00:00 2001 From: Lisa Junger Date: Tue, 31 Mar 2015 17:10:11 +0200 Subject: handle incorrectly encoded headers as ascii. - Issue #347 --- service/pixelated/adapter/model/mail.py | 10 ++++++++-- service/test/unit/adapter/test_mail.py | 12 ++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) (limited to 'service') diff --git a/service/pixelated/adapter/model/mail.py b/service/pixelated/adapter/model/mail.py index f23c2708..e11c4048 100644 --- a/service/pixelated/adapter/model/mail.py +++ b/service/pixelated/adapter/model/mail.py @@ -303,13 +303,19 @@ class PixelatedMail(Mail): return _headers + def _decode_header_with_fallback(self, entry): + try: + return decode_header(entry)[0][0] + except Exception, e: + return entry.encode('ascii', 'ignore') + def _decode_header(self, header): if not header: return None if isinstance(header, list): - return [decode_header(entry)[0][0] for entry in header] + return [self._decode_header_with_fallback(entry) for entry in header] else: - return decode_header(header)[0][0] + return self._decode_header_with_fallback(header) def _get_date(self): date = self.hdoc.content.get('date', None) diff --git a/service/test/unit/adapter/test_mail.py b/service/test/unit/adapter/test_mail.py index c7910b7f..68b340a7 100644 --- a/service/test/unit/adapter/test_mail.py +++ b/service/test/unit/adapter/test_mail.py @@ -1,3 +1,4 @@ +# -*- coding: UTF-8 -*- # # Copyright (c) 2014 ThoughtWorks, Inc. # @@ -334,6 +335,17 @@ class TestPixelatedMail(unittest.TestCase): mail.as_dict() + def test_parse_UTF8_headers_with_CharsetAscii(self): + leap_mail_from = u'"söme ümläuds" ' + leap_mail_to = u'"söme ümläuds" ,\n"söme ümläuds" ' + + leap_mail = test_helper.leap_mail(extra_headers={'From': leap_mail_from, 'Subject': "some subject", 'To': leap_mail_to}) + + mail = PixelatedMail.from_soledad(*leap_mail, soledad_querier=self.querier) + + mail.headers['From'].encode('ascii') + self.assertEqual(mail.headers['To'], ['"sme mluds" ', '"sme mluds" ']) + def simple_mail_dict(): return { -- cgit v1.2.3