From f974fcabacbedd164f7401c45e1b1bebc9f3cf18 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Sat, 23 Sep 2023 11:44:13 +0530 Subject: [PATCH] fix: ignore poorly encoded email parts --- frappe/email/receive.py | 5 +++-- frappe/email/test_email_body.py | 6 ++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/frappe/email/receive.py b/frappe/email/receive.py index d51d9e6be9..1c9bc6955b 100644 --- a/frappe/email/receive.py +++ b/frappe/email/receive.py @@ -435,7 +435,8 @@ class Email: self.from_real_name = parse_addr(_from_email)[0] if "@" in _from_email else _from_email - def decode_email(self, email): + @staticmethod + def decode_email(email): if not email: return decoded = "" @@ -443,7 +444,7 @@ class Email: frappe.as_unicode(email).replace('"', " ").replace("'", " ") ): if encoding: - decoded += part.decode(encoding) + decoded += part.decode(encoding, "replace") else: decoded += safe_decode(part) return decoded diff --git a/frappe/email/test_email_body.py b/frappe/email/test_email_body.py index b9128bc979..c2c69d8e3d 100644 --- a/frappe/email/test_email_body.py +++ b/frappe/email/test_email_body.py @@ -197,6 +197,12 @@ Reply-To: test2_@erpnext.com mail = Email(content_bytes) self.assertEqual(mail.text_content, text_content) + def test_poorly_encoded_messages(self): + mail = Email.decode_email( + "=?iso-2022-jp?B?VEFLQVlBTUEgS2FvcnUgWxskQnxiOzMbKEIgGyRCNzAbKEJd?=\n\t" + ) + self.assertIn("user@example.com", mail) + def fixed_column_width(string, chunk_size): parts = [string[0 + i : chunk_size + i] for i in range(0, len(string), chunk_size)]