diff --git a/mail_tracking/controllers/main.py b/mail_tracking/controllers/main.py index ab1ca78199..1f64c6a546 100644 --- a/mail_tracking/controllers/main.py +++ b/mail_tracking/controllers/main.py @@ -42,7 +42,7 @@ def _request_metadata(self): @http.route( [ - "/mail/tracking/open/" "//blank.gif", + "/mail/tracking/open///blank.gif", "/mail/tracking/open/" "///blank.gif", ], diff --git a/mail_tracking/models/mail_message.py b/mail_tracking/models/mail_message.py index c62de8644b..1b68b4b8ac 100644 --- a/mail_tracking/models/mail_message.py +++ b/mail_tracking/models/mail_message.py @@ -24,7 +24,7 @@ class MailMessage(models.Model): string="Mail Trackings", ) mail_tracking_needs_action = fields.Boolean( - help="The message tracking will be considered" " to filter tracking issues", + help="The message tracking will be considered to filter tracking issues", default=False, ) is_failed_message = fields.Boolean( @@ -41,6 +41,7 @@ def get_failed_states(self): "mail_tracking_needs_action", "author_id", "notification_ids", + "mail_tracking_ids", "mail_tracking_ids.state", ) def _compute_is_failed_message(self): diff --git a/mail_tracking/models/mail_thread.py b/mail_tracking/models/mail_thread.py index 6807293082..cc4c27a753 100644 --- a/mail_tracking/models/mail_thread.py +++ b/mail_tracking/models/mail_thread.py @@ -46,9 +46,16 @@ def _message_route_process(self, message, message_dict, routes): def _routing_handle_bounce(self, email_message, message_dict): bounced_message = message_dict["bounced_message"] - if bounced_message.mail_tracking_ids: - # TODO detect hard of soft bounce - bounced_message.mail_tracking_ids.event_create("soft_bounce", message_dict) + # Ensure that only the failed recipients are flagged + mail_trackings = bounced_message.mail_tracking_ids.filtered( + lambda x: x.recipient_address == message_dict["bounced_email"] + or ( + message_dict["bounced_partner"] + and message_dict["bounced_partner"] == x.partner_id + ) + ) + if mail_trackings: + mail_trackings.event_create("soft_bounce", message_dict) return super()._routing_handle_bounce(email_message, message_dict) def _message_get_suggested_recipients(self): diff --git a/mail_tracking/models/mail_tracking_email.py b/mail_tracking/models/mail_tracking_email.py index 7debf3d488..ac2c79e3c6 100644 --- a/mail_tracking/models/mail_tracking_email.py +++ b/mail_tracking/models/mail_tracking_email.py @@ -317,13 +317,8 @@ def _get_mail_tracking_img(self): ) if self.token: path_url = ( - "mail/tracking/open/%(db)s/%(tracking_email_id)s/%(token)s/" - "blank.gif" - % { - "db": self.env.cr.dbname, - "tracking_email_id": self.id, - "token": self.token, - } + f"mail/tracking/open/{self.env.cr.dbname}/{self.id}/{self.token}/" + f"blank.gif" ) else: # This is here for compatibility with older records @@ -331,11 +326,8 @@ def _get_mail_tracking_img(self): db=self.env.cr.dbname, tracking_email_id=self.id ) track_url = urllib.parse.urljoin(base_url, path_url) - return ( - '' - % {"url": track_url, "tracking_email_id": self.id} - ) + _logger.debug(f"Sending email will tracking url: {track_url}") + return f'' def _partners_email_bounced_set(self, reason, event=None): recipients = [] diff --git a/mail_tracking/static/src/components/message/message.xml b/mail_tracking/static/src/components/message/message.xml index ff8da66b3b..d4caa6ac0a 100644 --- a/mail_tracking/static/src/components/message/message.xml +++ b/mail_tracking/static/src/components/message/message.xml @@ -72,7 +72,8 @@ t-if="tracking['partner_id']" t-attf-class="o_mail_action_tracking_partner #{tracking['isCc'] ? 'o_mail_cc' : ''}" t-att-data-partner="tracking['partner_id']" - t-attf-href="#model=res.partner&id={{tracking['partner_id']}}" + data-oe-model="res.partner" + t-att-data-oe-id="tracking['partner_id']" t-out="tracking['recipient']" />