[FIX] mass_mailing: fix mail related values of statistics emails
When mailings have no responsible, KPIs emails are broken as there is no
from and to on the mail. This leads to mails being invalid and set in
exception.
Moreover currently author and from / to of those D+1 emails are not coherent
as author is current user (generally odoobot as this is generated through
a cron) while from and to are based on mailing responsible.
In this commit we make statistics emails more coherent
* when a responsible is set on the mailing: author, from and to are linked
to the responsible;
* when there is no responsible, current user is set as it may be sent by
regular people;
* reply-to is set to company email as it is often the case with 'marketing'
emails;
Task-2686586 (Repair mailing statistics email)
X-original-commit: 95a21ca16f560cf4341c547f6bc909d3261acd1b
Part-of: odoo/odoo#79877
This commit is contained in:
@@ -933,9 +933,13 @@ class MassMailing(models.Model):
|
||||
|
||||
mails_sudo = self.env['mail.mail'].sudo()
|
||||
for mailing in self:
|
||||
user = mailing.user_id
|
||||
mailing = mailing.with_context(lang=user.lang or self._context.get('lang'))
|
||||
if mailing.user_id:
|
||||
mailing = mailing.with_user(mailing.user_id).with_context(
|
||||
lang=mailing.user_id.lang or self._context.get('lang')
|
||||
)
|
||||
mailing_type = mailing._get_pretty_mailing_type()
|
||||
mail_user = mailing.user_id or self.env.user
|
||||
mail_company = mail_user.company_id
|
||||
|
||||
link_trackers = self.env['link.tracker'].search(
|
||||
[('mass_mailing_id', '=', mailing.id)]
|
||||
@@ -953,8 +957,8 @@ class MassMailing(models.Model):
|
||||
'digest.digest_mail_main',
|
||||
{
|
||||
'body': tools.html_sanitize(link_trackers_body),
|
||||
'company': user.company_id,
|
||||
'user': user,
|
||||
'company': mail_company,
|
||||
'user': mail_user,
|
||||
'display_mobile_banner': True,
|
||||
** mailing._prepare_statistics_email_values()
|
||||
},
|
||||
@@ -966,15 +970,17 @@ class MassMailing(models.Model):
|
||||
)
|
||||
|
||||
mail_values = {
|
||||
'auto_delete': True,
|
||||
'author_id': mail_user.partner_id.id,
|
||||
'email_from': mail_user.email_formatted,
|
||||
'email_to': mail_user.email_formatted,
|
||||
'body_html': full_mail,
|
||||
'reply_to': mail_company.email_formatted or mail_user.email_formatted,
|
||||
'state': 'outgoing',
|
||||
'subject': _('24H Stats of %(mailing_type)s "%(mailing_name)s"',
|
||||
mailing_type=mailing._get_pretty_mailing_type(),
|
||||
mailing_name=mailing.subject
|
||||
),
|
||||
'email_from': user.email_formatted,
|
||||
'email_to': user.email_formatted,
|
||||
'body_html': full_mail,
|
||||
'auto_delete': True,
|
||||
'state': 'outgoing',
|
||||
}
|
||||
mails_sudo += self.env['mail.mail'].sudo().create(mail_values)
|
||||
return mails_sudo
|
||||
|
||||
@@ -7,7 +7,7 @@ from odoo.addons.mail.tests.common import mail_new_test_user
|
||||
from odoo.addons.test_mail_full.tests.test_mass_sms import TestMassSMSCommon
|
||||
from odoo.tests.common import users
|
||||
from odoo.tests import tagged
|
||||
from odoo.tools import formataddr, mute_logger
|
||||
from odoo.tools import mute_logger
|
||||
|
||||
|
||||
@tagged('digest', 'mass_mailing')
|
||||
@@ -53,10 +53,10 @@ class TestMailingStatistics(TestMassSMSCommon):
|
||||
self.assertEqual(len(self._new_mails), 1, "Mailing: a mail should have been created for statistics")
|
||||
mail = self._new_mails[0]
|
||||
# test email values
|
||||
self.assertEqual(mail.author_id, self.user_marketing.partner_id)
|
||||
self.assertEqual(mail.author_id, self.user_marketing_2.partner_id)
|
||||
self.assertEqual(mail.email_from, self.user_marketing_2.email_formatted)
|
||||
self.assertEqual(mail.email_to, self.user_marketing_2.email_formatted)
|
||||
self.assertEqual(mail.reply_to, formataddr((self.company_admin.name, '%s@%s' % (self.alias_catchall, self.alias_domain))))
|
||||
self.assertEqual(mail.reply_to, self.company_admin.partner_id.email_formatted)
|
||||
self.assertEqual(mail.state, 'outgoing')
|
||||
# test body content: KPIs
|
||||
body_html = html.fromstring(mail.body_html)
|
||||
|
||||
@@ -8,7 +8,7 @@ from odoo.addons.test_mass_mailing.data.mail_test_data import MAIL_TEMPLATE
|
||||
from odoo.addons.test_mass_mailing.tests.common import TestMassMailCommon
|
||||
from odoo.tests.common import users
|
||||
from odoo.tests import tagged
|
||||
from odoo.tools import formataddr, mute_logger
|
||||
from odoo.tools import mute_logger
|
||||
|
||||
|
||||
@tagged('digest')
|
||||
@@ -59,10 +59,10 @@ class TestMailingStatistics(TestMassMailCommon):
|
||||
self.assertEqual(len(self._new_mails), 1, "Mailing: a mail should have been created for statistics")
|
||||
mail = self._new_mails[0]
|
||||
# test email values
|
||||
self.assertEqual(mail.author_id, self.user_marketing.partner_id)
|
||||
self.assertEqual(mail.author_id, self.user_marketing_2.partner_id)
|
||||
self.assertEqual(mail.email_from, self.user_marketing_2.email_formatted)
|
||||
self.assertEqual(mail.email_to, self.user_marketing_2.email_formatted)
|
||||
self.assertEqual(mail.reply_to, formataddr((self.company_admin.name, '%s@%s' % (self.alias_catchall, self.alias_domain))))
|
||||
self.assertEqual(mail.reply_to, self.company_admin.partner_id.email_formatted)
|
||||
self.assertEqual(mail.state, 'outgoing')
|
||||
# test body content: KPIs
|
||||
body_html = html.fromstring(mail.body_html)
|
||||
@@ -93,7 +93,7 @@ class TestMailingStatistics(TestMassMailCommon):
|
||||
mail = self._new_mails[0]
|
||||
# test email values
|
||||
self.assertEqual(mail.author_id, self.user_marketing.partner_id)
|
||||
self.assertFalse(mail.email_from)
|
||||
self.assertFalse(mail.email_to)
|
||||
self.assertEqual(mail.reply_to, formataddr((self.company_admin.name, '%s@%s' % (self.alias_catchall, self.alias_domain))))
|
||||
self.assertEqual(mail.email_from, self.user_marketing.email_formatted)
|
||||
self.assertEqual(mail.email_to, self.user_marketing.email_formatted)
|
||||
self.assertEqual(mail.reply_to, self.company_admin.partner_id.email_formatted)
|
||||
self.assertEqual(mail.state, 'outgoing')
|
||||
|
||||
Reference in New Issue
Block a user