68 lines
1.9 KiB
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
|