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