Skip to content

Commit

Permalink
[IMP] mail_tracking: Add option to keep aliases in mail tracking
Browse files Browse the repository at this point in the history
  • Loading branch information
cvinh authored and MiquelRForgeFlow committed Mar 22, 2023
1 parent 7f081ba commit 1d0e8d9
Show file tree
Hide file tree
Showing 8 changed files with 90 additions and 3 deletions.
1 change: 1 addition & 0 deletions mail_tracking/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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": [
Expand Down
2 changes: 2 additions & 0 deletions mail_tracking/models/__init__.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down
6 changes: 6 additions & 0 deletions mail_tracking/models/mail_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
7 changes: 4 additions & 3 deletions mail_tracking/models/mail_thread.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
10 changes: 10 additions & 0 deletions mail_tracking/models/res_company.py
Original file line number Diff line number Diff line change
@@ -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,
)
10 changes: 10 additions & 0 deletions mail_tracking/models/res_config_settings.py
Original file line number Diff line number Diff line change
@@ -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,
)
32 changes: 32 additions & 0 deletions mail_tracking/tests/test_mail_tracking.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 <[email protected]>, [email protected]",
"body": "<p>This is another test message</p>",
}
)
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"] == "[email protected]"
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)
Expand Down
25 changes: 25 additions & 0 deletions mail_tracking/views/res_config_settings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.mail.tracking</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="mail.res_config_settings_view_form" />
<field name="arch" type="xml">
<div id="emails" position="inside">
<div class="col-12 col-lg-6 o_setting_box" id="mail_tracking_settings">
<div class="o_setting_left_pane">
<field name="mail_tracking_show_aliases" />
</div>
<div class="o_setting_right_pane">
<div class="content-group">
<label for="mail_tracking_show_aliases" />
<div class="text-muted" id="mail_tracking_show_aliases">
Show Aliases in Mail Tracking
</div>
</div>
</div>
</div>
</div>
</field>
</record>
</odoo>

0 comments on commit 1d0e8d9

Please sign in to comment.