diff --git a/addons/mass_mailing/models/mailing.py b/addons/mass_mailing/models/mailing.py
index 71566ef5b47..870868c5757 100644
--- a/addons/mass_mailing/models/mailing.py
+++ b/addons/mass_mailing/models/mailing.py
@@ -89,8 +89,7 @@ class MassMailing(models.Model):
'Keep it empty if you prefer the first characters of your email content to appear instead.')
email_from = fields.Char(
string='Send From',
- compute='_compute_email_from', readonly=False, required=True, store=True,
- default=lambda self: self.env.user.email_formatted)
+ compute='_compute_email_from', readonly=False, required=True, store=True, precompute=True)
favorite = fields.Boolean('Favorite', copy=False, tracking=True)
favorite_date = fields.Datetime(
'Favorite Date',
@@ -252,12 +251,12 @@ class MassMailing(models.Model):
for mailing in self:
mailing.ab_testing_is_winner_mailing = mailing.campaign_id.ab_testing_winner_mailing_id == mailing
- @api.depends('mail_server_id')
+ @api.depends('mail_server_id', 'create_uid')
def _compute_email_from(self):
- user_email = self.env.user.email_formatted
notification_email = self.env['ir.mail_server']._get_default_from_address()
for mailing in self:
+ user_email = mailing.create_uid.email_formatted or self.env.user.email_formatted
server = mailing.mail_server_id
if not server:
mailing.email_from = mailing.email_from or user_email
diff --git a/addons/mass_mailing/tests/test_mailing_internals.py b/addons/mass_mailing/tests/test_mailing_internals.py
index 4783b467861..02eb84486a9 100644
--- a/addons/mass_mailing/tests/test_mailing_internals.py
+++ b/addons/mass_mailing/tests/test_mailing_internals.py
@@ -313,6 +313,68 @@ class TestMassMailValues(MassMailCommon):
})
self.assertEqual(literal_eval(mailing.mailing_domain), [('email', 'ilike', 'test.example.com')])
+ @users('user_marketing')
+ def test_mailing_computed_fields_default_email_from(self):
+ # Testing if the email_from is correctly computed when an
+ # alias domain for the company is set
+
+ # Setup mail outgoing server for use cases
+
+ from_filter_match, from_filter_missmatch = self.env['ir.mail_server'].sudo().create([
+ # Case where alias domain is set and there is a default outgoing email server
+ # for mass mailing. from_filter matches domain of company alias domain
+ # before record creation
+ {
+ 'name' : 'mass_mailing_test_match_from_filter',
+ 'from_filter' : self.alias_domain,
+ 'smtp_host' : 'not_real@smtp.com',
+ },
+ # Case where alias domain is set and there is a default outgoing email server
+ # for mass mailing. from_filter DOES NOT match domain of company alias domain
+ # before record creation
+ {
+ 'name' : 'mass_mailing_test_from_missmatch',
+ 'from_filter' : 'test.com',
+ 'smtp_host' : 'not_real@smtp.com',
+ },
+ ])
+
+ # Expected combos of server vs FROM values
+
+ servers = [
+ self.env['ir.mail_server'],
+ from_filter_match,
+ from_filter_missmatch,
+ ]
+ expected_from_all = [
+ self.env.user.email_formatted, # default when no server
+ self.env.user.company_id.alias_domain_id.default_from_email, # matches company alias domain
+ self.env.user.email_formatted, # not matching from filter -> back to user from
+ ]
+
+ for mail_server, expected_from in zip(servers, expected_from_all):
+ with self.subTest(server_name=mail_server.name):
+ # When a mail server is set, we update the mass mailing
+ # settings to designate a dedicated outgoing email server
+ if mail_server:
+ self.env['res.config.settings'].sudo().create({
+ 'mass_mailing_mail_server_id' : mail_server.id,
+ 'mass_mailing_outgoing_mail_server' : mail_server,
+ }).execute()
+
+ # Create mailing
+ mailing = self.env['mailing.mailing'].create({
+ 'name': f'TestMailing {mail_server.name}',
+ 'subject': f'Test {mail_server.name}',
+ })
+
+ # Check email_from
+ self.assertEqual(mailing.email_from, expected_from)
+
+ # If configured, check if dedicated email outgoing server is
+ # on mailing record
+ self.assertEqual(mailing.mail_server_id, mail_server)
+
@users('user_marketing')
def test_mailing_computed_fields_form(self):
mailing_form = Form(self.env['mailing.mailing'].with_context(
diff --git a/addons/mass_mailing/views/mailing_mailing_views.xml b/addons/mass_mailing/views/mailing_mailing_views.xml
index cd2252d41b7..8d8e18fabbf 100644
--- a/addons/mass_mailing/views/mailing_mailing_views.xml
+++ b/addons/mass_mailing/views/mailing_mailing_views.xml
@@ -197,6 +197,7 @@
+