diff --git a/froide/foirequest/tests/test_mail.py b/froide/foirequest/tests/test_mail.py index c0086c938..b2f70f8b5 100644 --- a/froide/foirequest/tests/test_mail.py +++ b/froide/foirequest/tests/test_mail.py @@ -296,6 +296,11 @@ def test_html_only_mail(self): self.assertIn(" ( https://", mail.body) self.assertIn("*peter.mueller@kreis-steinfurt.de*", mail.body) + def test_invalid_mail_address(self): + with open(p("test_mail_14.txt"), "rb") as f: + mail = parse_email(f) + self.assertEqual('john.doe@example.com', mail.to[0][1]) + class DeferredMessageTest(TestCase): def setUp(self): diff --git a/froide/foirequest/tests/testdata/test_mail_14.txt b/froide/foirequest/tests/testdata/test_mail_14.txt new file mode 100644 index 000000000..790026f05 --- /dev/null +++ b/froide/foirequest/tests/testdata/test_mail_14.txt @@ -0,0 +1,471 @@ +Return-Path: +X-Original-To: a.rbeiter.1234556667@fragdenstaat.de +Delivered-To: foimail@fragdenstaat.de +Received: from mail.kreis-steinfurt.de (mail.kreis-steinfurt.de [194.88.24.42]) + (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) + (No client certificate requested) + by fragdenstaat.de (Postfix) with ESMTPS id AC6F82E0076 + for ; Wed, 30 May 2018 16:29:02 +0200 (CEST) +To: 'John Doe [#123]' +ReplyTo: +Sender: "Mail-Gateway Kreis Steinfurt" +From: +Date: Wed, 30 May 2018 14:28:55 GMT +Message-Id: +Subject: =?utf-8?Q?Benachrichtigung_=c3=bcber_verschl=c3=bcsselte_Nachricht_?= + =?utf-8?Q?/Encrypted_mail_notification?= +MIME-Version: 1.0 +Content-Type: multipart/related; + boundary=NoSpamProxyBoundary_2684ef8e-ed31-4b55-9b13-a9ddd7eae474 + +--NoSpamProxyBoundary_2684ef8e-ed31-4b55-9b13-a9ddd7eae474 +Content-Disposition: inline; +Content-Type: text/html; charset=utf-8 +Content-Transfer-Encoding: QUOTED-PRINTABLE + + + + + Benachrichtigung über verschlüsselte Nachricht / Encrypted = +mail notification + + + + + + + + + + + +
+3D"Logo"
+ + +

Benachrichtigung über verschlüsselte Nachricht

+

+ peter.mueller@kreis-steinfurt.de möchte Ihnen eine verschl= +üsselte Nachricht zukommen lassen. +

+

Sie haben die folgenden zwei Möglichkeiten auf die Nachricht zuzugr= +eifen.

+
    +
  1. Wenn Sie ein S/MIME Zertifikat besitzen, dann antworten Sie einfach au= +f diese E-Mail und signieren die Nachricht mit Ihrem Zertifikat.
  2. +
  3. Sie können ebenso ein Passwort auf unserem Web Portal= + hinterlegen. Die E-Mail wird Ihnen dann umgehend zugestellt.
  4. +
+

Wenn Sie keine der oben genannten Optionen nutzen können oder wolle= +n, dann kontaktieren Sie peter.mueller@kreis-steinfurt.de.

+

An encrypted message is waiting for you

+

+ peter.mueller@kreis-steinfurt.de would like to send you an encr= +ypted message. +

+

You have two options to receive the message.

+
    +
  1. If you have an S/MIME certificate, reply to this mail and sign the mes= +sage with your certificate.
  2. +
  3. You can also deposit a password using our web portal. Once= + you have provided the password, the mail will be sent to you.
  4. +
+

Please contact peter.mueller@kreis-steinfurt.de if you are unable to or= + don't want to use one of the option above.

+ +
+ + +--NoSpamProxyBoundary_2684ef8e-ed31-4b55-9b13-a9ddd7eae474 +Content-Type: image/png; +Content-Disposition: attachment; filename=Logo.png +Content-Id: __Image_00001553 +Content-Transfer-Encoding: BASE64 + +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 + +--NoSpamProxyBoundary_2684ef8e-ed31-4b55-9b13-a9ddd7eae474-- + diff --git a/froide/helper/email_parsing.py b/froide/helper/email_parsing.py index 972b144b0..eef152a57 100644 --- a/froide/helper/email_parsing.py +++ b/froide/helper/email_parsing.py @@ -269,11 +269,21 @@ def try_decoding(encoded, encoding=None): return decoded +def check_mail(email: str): + # Credit for regex to Anđela Niketić at https://stackabuse.com/python-validate-email-address-with-regular-expressions-regex/ + regex_mail = r"([-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*|\"([]!#-[^-~ \t]|(\\[\t -~]))+\")@([-!#-'*+/-9=?A-Z^-~]+(\.[-!#-'*+/-9=?A-Z^-~]+)*|\[[\t -Z^-~]*])" + if not re.search(regex_mail, email): + return False + return True + + def get_address_list(values): values = [parse_header_field(value) for value in values] address_list = getaddresses(values) fixed = [] for addr in address_list: + if not check_mail(addr[1]): + continue fixed.append(EmailAddress(parse_header_field(addr[0]), addr[1])) return fixed