From ced39b419db494d294e3edda85a61d9e716e7d40 Mon Sep 17 00:00:00 2001 From: Raimon Esteve Date: Mon, 10 Jul 2023 19:51:51 +0200 Subject: [PATCH] Upgrade methods from tools/email.py core --- series | 2 ++ tools-email.diff | 67 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 tools-email.diff diff --git a/series b/series index e5977ad..0419f7a 100644 --- a/series +++ b/series @@ -75,3 +75,5 @@ issue12349.diff # [marketing_email] Multiple mareting emails created at once hav product-cost-fifo-average.diff # [product_cost_fifo] [product_cost_history] [stock] Add product cost price to move issue10650.diff # [account_dunning_email] [marketing_automation] [marketing_email] [notification_email] [trytond] Support RFC6530 on email formatting + +tools-email.diff # [trytond] tools email diff --git a/tools-email.diff b/tools-email.diff new file mode 100644 index 0000000..f52fae5 --- /dev/null +++ b/tools-email.diff @@ -0,0 +1,67 @@ +diff --git a/tryton/trytond/trytond/tools/email_.py b/tryton/trytond/trytond/tools/email_.py +index f8141ec84d..061f01a17e 100644 +--- a/tryton/trytond/trytond/tools/email_.py ++++ b/tryton/trytond/trytond/tools/email_.py +@@ -2,6 +2,12 @@ + # this repository contains the full copyright notices and license terms. + from email.utils import parseaddr + ++from trytond.pool import Pool ++ ++__all__ = [ ++ 'set_from_header', 'validate_email', 'normalize_email', ++ 'convert_ascii_email', 'EmailNotValidError'] ++ + + def _domainaddr(address): + _, email = parseaddr(address) +@@ -21,3 +27,49 @@ def set_from_header(message, sender, from_): + message['Reply-To'] = from_ + else: + message['From'] = from_ ++ ++ ++try: ++ from email_validator import EmailNotValidError, caching_resolver ++ from email_validator import validate_email as _validate_email ++ ++ resolver = caching_resolver() ++ ++ def validate_email(email): ++ emailinfo = _validate_email( ++ email, check_deliverability=True, ++ dns_resolver=resolver, ++ test_environment=Pool.test) ++ return emailinfo.normalized ++ ++ def normalize_email(email): ++ try: ++ emailinfo = _validate_email( ++ email, check_deliverability=False, ++ test_environment=Pool.test) ++ return emailinfo.normalized ++ except EmailNotValidError: ++ return email ++ ++ def convert_ascii_email(email): ++ try: ++ emailinfo = _validate_email( ++ email, check_deliverability=False, ++ test_environment=Pool.test) ++ return emailinfo.ascii_email ++ except EmailNotValidError: ++ return email ++ ++except ImportError: ++ ++ def validate_email(email): ++ return email ++ ++ def normalize_email(email): ++ return email ++ ++ def convert_ascii_email(email): ++ return email ++ ++ class EmailNotValidError(Exception): ++ pass