trytond-patches/tools-email.diff

68 lines
1.9 KiB
Diff

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