[FIX] mass_mailing: the blank.gif image in the emails always raise a 500 error
Bug
===
Since 6185f14807 we check the <mail.mail>
existence before marking the <mailing.trace> as opened, but since
57ae1b9b8b61f5f4719a8a81e9d0d21fab58cfda we remove the <mail.mail>
automatically when we send them.
The result is that this endpoint always raise a 500 error.
To be: the <mail.mail> existence shouldn't be checked in this endpoint
(the token is valid for the raw integer id).
Task-3234519
closes odoo/odoo#115842
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
This commit is contained in:
@@ -118,8 +118,8 @@ class MassMailController(http.Controller):
|
||||
@http.route('/mail/track/<int:mail_id>/<string:token>/blank.gif', type='http', auth='public')
|
||||
def track_mail_open(self, mail_id, token, **post):
|
||||
""" Email tracking. """
|
||||
mail = request.env['mail.mail'].sudo().browse(mail_id).exists()
|
||||
if not mail or not consteq(token, mail._generate_mail_recipient_token()):
|
||||
expected_token = request.env['mail.mail']._generate_mail_recipient_token(mail_id)
|
||||
if not consteq(token, expected_token):
|
||||
raise BadRequest()
|
||||
|
||||
request.env['mailing.trace'].sudo().set_opened(domain=[('mail_mail_id_int', 'in', [mail_id])])
|
||||
|
||||
@@ -25,15 +25,15 @@ class MailMail(models.Model):
|
||||
return mails
|
||||
|
||||
def _get_tracking_url(self):
|
||||
token = self._generate_mail_recipient_token()
|
||||
token = self._generate_mail_recipient_token(self.id)
|
||||
return werkzeug.urls.url_join(
|
||||
self.get_base_url(),
|
||||
f'mail/track/{self.id}/{token}/blank.gif'
|
||||
)
|
||||
|
||||
def _generate_mail_recipient_token(self):
|
||||
self.ensure_one()
|
||||
return tools.hmac(self.env(su=True), 'mass_mailing-mail_mail-open', self.id)
|
||||
@api.model
|
||||
def _generate_mail_recipient_token(self, mail_id):
|
||||
return tools.hmac(self.env(su=True), 'mass_mailing-mail_mail-open', mail_id)
|
||||
|
||||
def _prepare_outgoing_body(self):
|
||||
""" Override to add the tracking URL to the body and to add trace ID in
|
||||
|
||||
@@ -73,22 +73,25 @@ class TestMailingControllers(MassMailCommon, HttpCase):
|
||||
mailing.action_send_mail()
|
||||
|
||||
mail = self._find_mail_mail_wrecord(self.test_contact)
|
||||
mail_id_int = mail.id
|
||||
mail_tracking_url = mail._get_tracking_url()
|
||||
mailing_trace = mail.mailing_trace_ids
|
||||
self.assertEqual(mail.state, 'sent')
|
||||
self.assertEqual(len(mailing_trace), 1)
|
||||
self.assertFalse(mailing_trace.open_datetime)
|
||||
self.assertEqual(mailing_trace.trace_status, 'sent')
|
||||
mail.unlink() # the mail might be removed during the email sending
|
||||
self.env.flush_all()
|
||||
|
||||
with freeze_time(self._reference_now):
|
||||
response = self.url_open(mail._get_tracking_url())
|
||||
response = self.url_open(mail_tracking_url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(mail.state, 'sent')
|
||||
self.assertEqual(mailing_trace.open_datetime, self._reference_now)
|
||||
self.assertEqual(mailing_trace.trace_status, 'open')
|
||||
|
||||
track_url = werkzeug.urls.url_join(
|
||||
mail.get_base_url(),
|
||||
'mail/track/%s/fake_token/blank.gif' % mail.id
|
||||
mailing.get_base_url(),
|
||||
f'mail/track/{mail_id_int}/fake_token/blank.gif'
|
||||
)
|
||||
response = self.url_open(track_url)
|
||||
self.assertEqual(response.status_code, 400)
|
||||
|
||||
Reference in New Issue
Block a user