diff --git a/mail_tracking/__manifest__.py b/mail_tracking/__manifest__.py index a06b00179a..40b3d27ee5 100644 --- a/mail_tracking/__manifest__.py +++ b/mail_tracking/__manifest__.py @@ -23,6 +23,7 @@ "views/mail_tracking_event_view.xml", "views/mail_message_view.xml", "views/res_partner_view.xml", + "views/res_config_settings.xml", ], "assets": { "web.assets_backend": [ diff --git a/mail_tracking/models/__init__.py b/mail_tracking/models/__init__.py index 1a5aded02f..d4c0721ee0 100644 --- a/mail_tracking/models/__init__.py +++ b/mail_tracking/models/__init__.py @@ -1,5 +1,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from . import res_company +from . import res_config_settings from . import ir_mail_server from . import mail_bounced_mixin from . import mail_mail diff --git a/mail_tracking/models/mail_message.py b/mail_tracking/models/mail_message.py index 599d6445c0..55763f64fb 100644 --- a/mail_tracking/models/mail_message.py +++ b/mail_tracking/models/mail_message.py @@ -217,6 +217,12 @@ def tracking_status(self): @api.model def _drop_aliases(self, mail_list): aliases = self.env["mail.alias"].get_aliases() + if self.env.company.mail_tracking_show_aliases: + IrConfigParamObj = self.env["ir.config_parameter"].sudo() + aliases = "{}@{}".format( + IrConfigParamObj.get_param("mail.catchall.alias"), + IrConfigParamObj.get_param("mail.catchall.domain"), + ) def _filter_alias(email): email_wn = getaddresses([email])[0][1] diff --git a/mail_tracking/models/mail_thread.py b/mail_tracking/models/mail_thread.py index a18478ff06..3884463d07 100644 --- a/mail_tracking/models/mail_thread.py +++ b/mail_tracking/models/mail_thread.py @@ -75,9 +75,10 @@ def _add_extra_recipients_suggestions(self, suggestions, field_mail, reason): ) else: partner = ResPartnerObj.browse(partner_id) - self._message_add_suggested_recipient( - suggestions, partner=partner, reason=reason - ) + if partner.email not in aliases: + self._message_add_suggested_recipient( + suggestions, partner=partner, reason=reason + ) @api.model def _fields_view_get( diff --git a/mail_tracking/models/res_company.py b/mail_tracking/models/res_company.py new file mode 100644 index 0000000000..afdcce95bc --- /dev/null +++ b/mail_tracking/models/res_company.py @@ -0,0 +1,10 @@ +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + mail_tracking_show_aliases = fields.Boolean( + string="Show Aliases in Mail Tracking", + default=False, + ) diff --git a/mail_tracking/models/res_config_settings.py b/mail_tracking/models/res_config_settings.py new file mode 100644 index 0000000000..5a78273b82 --- /dev/null +++ b/mail_tracking/models/res_config_settings.py @@ -0,0 +1,10 @@ +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + mail_tracking_show_aliases = fields.Boolean( + related="company_id.mail_tracking_show_aliases", + readonly=False, + ) diff --git a/mail_tracking/tests/test_mail_tracking.py b/mail_tracking/tests/test_mail_tracking.py index c239aab24b..28a26afc5d 100644 --- a/mail_tracking/tests/test_mail_tracking.py +++ b/mail_tracking/tests/test_mail_tracking.py @@ -161,6 +161,38 @@ def test_message_post_partner_no_email(self): self.assertEqual(tracking_email.error_type, "no_recipient") self.assertFalse(self.recipient.email_bounced) + def test_message_post_show_aliases(self): + # Create message with show aliases setup + self.env.company.mail_tracking_show_aliases = True + # Setup catchall domain + IrConfigParamObj = self.env["ir.config_parameter"].sudo() + IrConfigParamObj.set_param("mail.catchall.domain", "test.com") + # pylint: disable=C8107 + message = self.env["mail.message"].create( + { + "subject": "Message test", + "author_id": self.sender.id, + "email_from": self.sender.email, + "message_type": "comment", + "model": "res.partner", + "res_id": self.recipient.id, + "partner_ids": [(4, self.recipient.id)], + "email_cc": "Dominique Pinon , customer-invoices@test.com", + "body": "

This is another test message

", + } + ) + if message.is_thread_message(): + self.env[message.model].browse(message.res_id)._notify_thread(message) + message_dict, *_ = message.message_format() + self.assertTrue( + any( + [ + tracking["recipient"] == "customer-invoices@test.com" + for tracking in message_dict["partner_trackings"] + ] + ) + ) + def _check_partner_trackings_cc(self, message): message_dict = message.message_format()[0] self.assertEqual(len(message_dict["partner_trackings"]), 3) diff --git a/mail_tracking/views/res_config_settings.xml b/mail_tracking/views/res_config_settings.xml new file mode 100644 index 0000000000..d7edcafbac --- /dev/null +++ b/mail_tracking/views/res_config_settings.xml @@ -0,0 +1,25 @@ + + + + res.config.settings.view.form.inherit.mail.tracking + res.config.settings + + +
+
+
+ +
+
+
+
+
+
+
+
+
+