From: Christian Herdtweck Date: Mon, 15 Jul 2019 11:02:19 +0000 (+0200) Subject: Create mail_utils test with latin1 encoded mail X-Git-Tag: v1.6~1^2~3 X-Git-Url: http://developer.intra2net.com/git/?a=commitdiff_plain;h=9d63dd8fac43d1dd2add7451f14df5452458fe55;p=pyi2ncommon Create mail_utils test with latin1 encoded mail --- diff --git a/test/test_mail_utils.py b/test/test_mail_utils.py index 33cb198..eb65ece 100644 --- a/test/test_mail_utils.py +++ b/test/test_mail_utils.py @@ -97,6 +97,64 @@ ENVELOPE_END = '.\n' ATTACHMENT_FILENAME = '2018年度公开课计划表.xlsx' +LATIN1_MAIL = b'\n'.join(( + b'Return-Path: ', + b'Received: from vm1.net.lan ([unix socket])', + b'\t by vm1.net.lan with LMTPA;', + b'\t Mon, 15 Jul 2019 09:08:56 +0200', + b'X-Sieve: CMU Sieve 2.4', + b'Received: from localhost (vm1.net.lan [127.0.0.1])', + b'\tby localhost (Postfix) with ESMTP id E7BBE1F460', + b'\tfor ; Mon, 15 Jul 2019 09:08:56 +0200 (CEST)', + b'X-Virus-Scanned: by Intra2net Mail Security (AVE=8.3.54.20,VDF=8.15.29.48)', + b'X-Spam-Status: No, score=-208 required=5 tests=[ALL_INTERNAL=-200,', + b'\tALL_TRUSTED=-2, BAYES_00=-6] autolearn=Intra2net', + b'X-Spam-Level: 0', + b'Received: from vm1.net.lan ([127.0.0.1]) by vm1.net.lan (Postfix, from userid 0)', + b'\tid 97AD81F45E; Mon, 15 Jul 2019 09:08:56 +0200 (CEST)', + b'Content-Type: text/plain; charset="iso-8859-1"', + b'To: postmaster@vm1.net.lan', + b'From: postmaster@vm1.net.lan', + b'Subject: Intra2net Business Server Update: Version 6.6.0 installiert', + b'Message-Id: <20190715070856.97AD81F45E@vm1.net.lan>', + b'Date: Mon, 15 Jul 2019 09:08:56 +0200 (CEST)', + b'', + b'Eine neue Intra2net Business Server Version wurde vom Update-System installiert.', + b'Diese Version bringt folgende Neuerungen:', + b'', + b'Version: 6.6.0', + b'', + b'- Neuer Linux Kernel 4.19 steigert die Systemleistung', + b' - Bis zu 30% h\xf6herer Durchsatz in der E-Mailverarbeitung', + b' - Aktualisierte Treiber f\xfcr neue und bestehende Hardware', + b' - Beschleunigter TCP-Verbindungsaufbau und mehr Durchsatz', + b' - Viele neue Schutzfunktionen um Angriffe zu erschweren', + b' - Performance bei Systemen mit 8GB und mehr Arbeitsspeicher gesteigert', + b' - Neueste Version der VMware- und Hyper-V-Tools', + b'', + b'- Weitere Verbesserungen', + b' - Der Anhangfilter kann jetzt schreibgesch\xfctzte', + b' Excel-Dateien auf gef\xe4hrliche Makros untersuchen', + b' - Schutz vor Durchprobieren von Passw\xf6rtern aus dem Internet versch\xe4rft', + b' - Aktualisierte Spamfilter-Regeln', + b'', + b'- Kumulatives Sicherheitsupdate behebt 14 Schwachstellen', + b' (ImageMagick-7.0.8-50, curl-7.65.1: CVE-2019-5435, libxml2-2.9.9:', + b' CVE-2018-9251, CVE-2018-14567 und CVE-2018-14404, libxslt-1.1.33:', + b' CVE-2019-11068, poppler-0.78.0, python-3.7.3: CVE-2019-9636, CVE-2019-9740', + b' und CVE-2019-9947, python37-urllib3-1.24.3: CVE-2019-9740, sqlite-3.26.0:', + b' CVE-2019-5827, CVE-2019-9936 und CVE-2019-9937)', + b'', + b'- Aktualisierung von Linux-Basisdiensten', + b' (file-5.37, glib2-2.58.3, hyperv-daemons-20190303, iproute2-5.0,', + b' iptables-1.8.3, kernel-4.19.57, linux-firmware-2019-06-18, mdadm-4.1,', + b' open-vm-tools-10.3.10, openssl-1.0.2s, python37-oletools-0.54.2,', + b' savapi-4.11.1)', + b'', + b'', + b'Hinweis: Dieses Update enth\xe4lt weiterhin einen 32-Bit Kernel.', + b'Der 64-Bit Kernel wird erst mit Update 6.7.0 im Herbst kommen.', +)) class MailUtilsFunctionTest(unittest.TestCase): @@ -166,3 +224,31 @@ class MailUtilsFunctionTest(unittest.TestCase): msg.set_unixfrom('Autotest-Sender@localhost') self.assertEqual(mail_utils.parse_mail_date(msg), result) + + def test_latin1_mail(self): + """Check reading mail with non-ascii chars not encoded with utf8""" + mail_file = join(self.temp_dir, 'update-mail') + with open(mail_file, 'xb') as writer: + writer.write(LATIN1_MAIL) + + # check this does not raise a UnicodeDecodeError + msg1 = mail_utils.parse_mail_file(mail_file, headers_only=False) + msg2, fnames = mail_utils.parse_mail_file(mail_file, headers_only=True, + attachment_filenames=True) + self.assertTupleEqual(fnames, tuple()) + + # check basic parsing worked + for msg in (msg1, msg2): + self.assertEqual(mail_utils.parse_mail_date(msg) + .replace(tzinfo=None), dt(2019, 7, 15, 9, 8, 56)) + self.assertEqual(msg['Subject'], + 'Intra2net Business Server Update: ' + 'Version 6.6.0 installiert') + self.assertEqual(msg['Content-Type'], + 'text/plain; charset="iso-8859-1"') + + # also test text finder + text = mail_utils.get_message_text(mail_file) + self.assertIn('Neuer Linux Kernel 4.19', text) + self.assertIn('30% höherer Durchsatz in der E-Mailverarbeitung', text) + self.assertIn('gefährliche Makros', text)