From 003339cd6c8bd213692afde4175168868341101e Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Tue, 29 Jul 2014 19:23:55 -0400 Subject: [PATCH] Fix: Parsing should ignore header casing --- imbox/parser.py | 16 ++++++++-------- tests/parser_tests.py | 9 +++++++++ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/imbox/parser.py b/imbox/parser.py index 6346277..85bd693 100644 --- a/imbox/parser.py +++ b/imbox/parser.py @@ -132,21 +132,21 @@ def parse_email(raw_email): parsed_email['sent_to'] = get_mail_addresses(email_message, 'to') - value_headers_keys = ['Subject', 'Date','Message-ID'] - key_value_header_keys = ['Received-SPF', - 'MIME-Version', - 'X-Spam-Status', - 'X-Spam-Score', - 'Content-Type'] + value_headers_keys = ['subject', 'date','message-id'] + key_value_header_keys = ['received-spf', + 'mime-version', + 'x-spam-status', + 'x-spam-score', + 'content-type'] parsed_email['headers'] = [] for key, value in email_dict.iteritems(): - if key in value_headers_keys: + if key.lower() in value_headers_keys: valid_key_name = key.lower().replace('-', '_') parsed_email[valid_key_name] = decode_mail_header(value) - if key in key_value_header_keys: + if key.lower() in key_value_header_keys: parsed_email['headers'].append({'Name': key, 'Value': value}) diff --git a/tests/parser_tests.py b/tests/parser_tests.py index fa71446..fbca8a2 100644 --- a/tests/parser_tests.py +++ b/tests/parser_tests.py @@ -43,6 +43,15 @@ class TestParser(unittest.TestCase): parsed_email = parse_email(raw_email) self.assertEqual(u'Test email - no attachment', parsed_email.subject) + self.assertEqual(u'Tue, 30 Jul 2013 15:56:29 +0300', parsed_email.date) + self.assertEqual(u'', parsed_email.message_id) + + + def test_parse_email_ignores_header_casing(self): + self.assertEqual('one', parse_email('Message-ID: one').message_id) + self.assertEqual('one', parse_email('Message-Id: one').message_id) + self.assertEqual('one', parse_email('Message-id: one').message_id) + self.assertEqual('one', parse_email('message-id: one').message_id) # TODO - Complete the test suite