Skip to content

Commit

Permalink
[FIX] mail_tracking: bounces and others
Browse files Browse the repository at this point in the history
Some improvements/fixes detected in #1367 and brought to  `16.0`:

- Add `mail_tracking_ids` to `_compute_is_failed_message` triggers.
- Handle bounces to avoid flagging recipients which aren't bounced.
- Add a logger.debug to research tracking issues
- Make the links in the trackings respect the breadcrumb actions.
  • Loading branch information
chienandalu committed Jul 1, 2024
1 parent b92831c commit 4ed6ae1
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 19 deletions.
2 changes: 1 addition & 1 deletion mail_tracking/controllers/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def _request_metadata(self):

@http.route(
[
"/mail/tracking/open/<string:db>" "/<int:tracking_email_id>/blank.gif",
"/mail/tracking/open/<string:db>/<int:tracking_email_id>/blank.gif",
"/mail/tracking/open/<string:db>"
"/<int:tracking_email_id>/<string:token>/blank.gif",
],
Expand Down
3 changes: 2 additions & 1 deletion mail_tracking/models/mail_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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):
Expand Down
13 changes: 10 additions & 3 deletions mail_tracking/models/mail_thread.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
16 changes: 4 additions & 12 deletions mail_tracking/models/mail_tracking_email.py
Original file line number Diff line number Diff line change
Expand Up @@ -317,25 +317,17 @@ 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
path_url = "mail/tracking/open/{db}/{tracking_email_id}/blank.gif".format(
db=self.env.cr.dbname, tracking_email_id=self.id
)
track_url = urllib.parse.urljoin(base_url, path_url)
return (
'<img src="%(url)s" alt="" '
'data-odoo-tracking-email="%(tracking_email_id)s"/>'
% {"url": track_url, "tracking_email_id": self.id}
)
_logger.debug(f"Sending email will tracking url: {track_url}")
return f'<img src="{track_url}" alt="" data-odoo-tracking-email="{self.id}"/>'

def _partners_email_bounced_set(self, reason, event=None):
recipients = []
Expand Down
3 changes: 2 additions & 1 deletion mail_tracking/static/src/components/message/message.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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&amp;id={{tracking['partner_id']}}"
data-oe-model="res.partner"
t-att-data-oe-id="tracking['partner_id']"
t-out="tracking['recipient']"
/>
<span
Expand Down
2 changes: 1 addition & 1 deletion mail_tracking/tests/test_mail_tracking.py
Original file line number Diff line number Diff line change
Expand Up @@ -613,7 +613,7 @@ def test_bounce_tracking_event_created(self):
message.mail_tracking_ids = [Command.link(tracking.id)]
mail.mail_message_id = message
message_dict = {
"bounced_email": "test@test.net",
"bounced_email": self.recipient.email,
"bounced_message": message,
"bounced_msg_id": [message.message_id],
"bounced_partner": self.recipient,
Expand Down

0 comments on commit 4ed6ae1

Please sign in to comment.