mirror of https://github.com/OCA/social.git
64 lines
2.6 KiB
Python
64 lines
2.6 KiB
Python
# Copyright 2016 Tecnativa - Antonio Espinosa
|
|
# Copyright 2017 Tecnativa - Vicent Cubells
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
|
|
from odoo import api, models
|
|
|
|
|
|
class MailMail(models.Model):
|
|
_inherit = "mail.mail"
|
|
|
|
@api.model
|
|
def _tracking_email_prepare(self, partner, email):
|
|
res = super()._tracking_email_prepare(partner, email)
|
|
res["mail_id_int"] = self.id
|
|
res["mass_mailing_id"] = self.mailing_id.id
|
|
res["mail_stats_id"] = (
|
|
self.mailing_trace_ids[:1].id if self.mailing_trace_ids else False
|
|
)
|
|
return res
|
|
|
|
@api.model
|
|
def _get_tracking_url(self):
|
|
# Invalid this tracking image, we have other to do the same
|
|
return False
|
|
|
|
def _postprocess_sent_message(
|
|
self, success_pids, failure_reason=False, failure_type=None
|
|
):
|
|
"""Set mailing traces in error according to mail tracking state
|
|
|
|
If an exception is caught by ir.mail_server.send_email in mail_tracking module,
|
|
the mail.tracking.email record will appear in error but the related mailing
|
|
trace would still appear as sent because this method is called without any
|
|
failure_type in mail.mail._send in the mail module (as Exception is not raised
|
|
after being caught in mail_tracking module).
|
|
|
|
Since this method not only sets the mailing.trace state in mass_mailing module
|
|
but can also delete the mail.mail records in mail module, we need to ensure
|
|
the mailing.trace is written accordingly to the tracking here, and avoid having
|
|
the mass_mailing module set a 'sent' status if we had an exception, hence
|
|
the usage of a context key to ignore possible writes.
|
|
"""
|
|
processed_ids = []
|
|
for mail in self:
|
|
mail_tracking = mail.mailing_trace_ids.mail_tracking_id
|
|
if mail.mailing_id and mail_tracking.state == "error":
|
|
mail_failure_type = (
|
|
"mail_email_invalid"
|
|
if mail_tracking.error_type == "no_recipient"
|
|
else "mail_smtp"
|
|
)
|
|
mail.mailing_trace_ids.write(
|
|
{
|
|
"failure_type": mail_failure_type,
|
|
}
|
|
)
|
|
processed_ids.extend(mail.mailing_trace_ids.ids)
|
|
return super(
|
|
MailMail,
|
|
self.with_context(_ignore_write_trace_postprocess_ids=processed_ids),
|
|
)._postprocess_sent_message(
|
|
success_pids, failure_reason=failure_reason, failure_type=failure_type
|
|
)
|