diff --git a/addons/crm/models/crm_lead.py b/addons/crm/models/crm_lead.py index 210029dbbdd0a5fd461ae339442cf06a2430b23e..693b67ff751ebadfafba5864c0496f1ec8648db5 100644 --- a/addons/crm/models/crm_lead.py +++ b/addons/crm/models/crm_lead.py @@ -8,6 +8,7 @@ from datetime import date, datetime, timedelta from psycopg2 import sql from odoo import api, fields, models, tools, SUPERUSER_ID +from odoo.addons.mail.tools import mail_validation from odoo.addons.phone_validation.tools import phone_validation from odoo.exceptions import UserError, AccessError from odoo.osv import expression @@ -18,6 +19,8 @@ from . import crm_stage _logger = logging.getLogger(__name__) + + CRM_LEAD_FIELDS_TO_MERGE = [ # UTM mixin 'campaign_id', @@ -451,7 +454,7 @@ class Lead(models.Model): if lead.email_from: email_state = 'incorrect' for email in email_split(lead.email_from): - if tools.email_normalize(email): + if mail_validation.mail_validate(email): email_state = 'correct' break lead.email_state = email_state diff --git a/addons/mail/__init__.py b/addons/mail/__init__.py index f2cd96d8c832a480f86ac4028ba9594e1037257a..2334d4398bec08bf329150016d031f422f2218f0 100644 --- a/addons/mail/__init__.py +++ b/addons/mail/__init__.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- - from . import models +from . import tools from . import wizard from . import controllers diff --git a/addons/mail/tools/__init__.py b/addons/mail/tools/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b9c73282748e4d1aec5a009fa0b04d8ea2c256a5 --- /dev/null +++ b/addons/mail/tools/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import mail_validation diff --git a/addons/mail/tools/mail_validation.py b/addons/mail/tools/mail_validation.py new file mode 100644 index 0000000000000000000000000000000000000000..937bdcd262e101fc3faa0db7cc9b173b2fd2ed86 --- /dev/null +++ b/addons/mail/tools/mail_validation.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. +import logging + +from odoo import tools + +_logger = logging.getLogger(__name__) + +_flanker_lib_warning = False + +try: + from flanker.addresslib import address + # Avoid warning each time a mx server is not reachable by flanker + logging.getLogger("flanker.addresslib.validate").setLevel(logging.ERROR) + + def mail_validate(email): + return bool(address.validate_address(email)) + +except ImportError: + + def mail_validate(email): + global _flanker_lib_warning + if not _flanker_lib_warning: + _flanker_lib_warning = True + _logger.info("The `flanker` Python module is not installed," + "so email validation fallback to email_normalize. Use 'pip install flanker' to install it") + return tools.email_normalize(email)