From e2bc4d57c251c5862b64822a497097b98f3d61fe Mon Sep 17 00:00:00 2001 From: David Beguin Date: Tue, 28 Aug 2018 10:22:15 +0200 Subject: [PATCH] [IMP] mass_mailing : add invalid mass mailing contact email filter In order to be aligned with the valid recipients counter on mass mailing list, the valid recipients filter should also exclude invalid emails. --- addons/mass_mailing/models/mass_mailing.py | 12 ++++++++++-- addons/mass_mailing/views/mass_mailing_views.xml | 4 +++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/addons/mass_mailing/models/mass_mailing.py b/addons/mass_mailing/models/mass_mailing.py index 1d946765102..a7ef516f2f5 100644 --- a/addons/mass_mailing/models/mass_mailing.py +++ b/addons/mass_mailing/models/mass_mailing.py @@ -5,6 +5,7 @@ import hashlib import hmac import logging import random +import re import threading from ast import literal_eval @@ -23,6 +24,7 @@ MASS_MAILING_BUSINESS_MODELS = [ 'sale.order', 'mail.mass_mailing.list', ] +EMAIL_PATTERN = '([^ ,;<@]+@[^> ,;]+)' class MassMailingTag(models.Model): @@ -115,10 +117,10 @@ class MassMailingList(models.Model): where COALESCE(r.opt_out,FALSE) = FALSE AND c.email NOT IN (select email from mail_blacklist where active = TRUE) - AND substring(c.email, '([^ ,;<@]+@[^> ,;]+)') IS NOT NULL + AND substring(c.email, '%s') IS NOT NULL group by list_id - ''') + ''' % EMAIL_PATTERN) data = dict(self.env.cr.fetchall()) for mailing_list in self: mailing_list.contact_nbr = data.get(mailing_list.id, 0) @@ -210,6 +212,7 @@ class MassMailingContact(models.Model): company_name = fields.Char(string='Company Name') title_id = fields.Many2one('res.partner.title', string='Title') email = fields.Char(required=True) + is_email_valid = fields.Boolean(compute='_compute_is_email_valid', store=True) create_date = fields.Datetime(string='Creation Date') list_ids = fields.Many2many( 'mail.mass_mailing.list', 'mail_mass_mailing_contact_list_rel', @@ -220,6 +223,11 @@ class MassMailingContact(models.Model): country_id = fields.Many2one('res.country', string='Country') tag_ids = fields.Many2many('res.partner.category', string='Tags') + @api.depends('email') + def _compute_is_email_valid(self): + for record in self: + record.is_email_valid = re.match(EMAIL_PATTERN, record.email) + def get_name_email(self, name): name, email = self.env['res.partner']._parse_partner_name(name) if name and not email: diff --git a/addons/mass_mailing/views/mass_mailing_views.xml b/addons/mass_mailing/views/mass_mailing_views.xml index 6389335f0c2..1b278a1e36b 100644 --- a/addons/mass_mailing/views/mass_mailing_views.xml +++ b/addons/mass_mailing/views/mass_mailing_views.xml @@ -61,11 +61,13 @@ + + - +