diff --git a/addons/mass_mailing/wizard/mailing_mailing_test.py b/addons/mass_mailing/wizard/mailing_mailing_test.py
index e3c1970afae..595425638a0 100644
--- a/addons/mass_mailing/wizard/mailing_mailing_test.py
+++ b/addons/mass_mailing/wizard/mailing_mailing_test.py
@@ -1,15 +1,15 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import fields, models, tools
+from odoo import _, fields, models, tools
class TestMassMailing(models.TransientModel):
_name = 'mailing.mailing.test'
_description = 'Sample Mail Wizard'
- email_to = fields.Char(string='Recipients', required=True,
- help='Comma-separated list of email addresses.', default=lambda self: self.env.user.email_formatted)
+ email_to = fields.Text(string='Recipients', required=True,
+ help='Carriage-return-separated list of email addresses.', default=lambda self: self.env.user.email_formatted)
mass_mailing_id = fields.Many2one('mailing.mailing', string='Mailing', required=True, ondelete='cascade')
def send_mail_test(self):
@@ -19,8 +19,16 @@ class TestMassMailing(models.TransientModel):
self = self.with_context(ctx)
mails_sudo = self.env['mail.mail'].sudo()
+ valid_emails = []
+ invalid_candidates = []
+ for candidate in self.email_to.splitlines():
+ test_email = tools.email_split(candidate)
+ if test_email:
+ valid_emails.append(test_email[0])
+ else:
+ invalid_candidates.append(candidate)
+
mailing = self.mass_mailing_id
- test_emails = tools.email_split(self.email_to)
mass_mail_layout = self.env.ref('mass_mailing.mass_mailing_mail_layout')
record = self.env[mailing.mailing_model_real].search([], limit=1)
@@ -38,20 +46,45 @@ class TestMassMailing(models.TransientModel):
body = self.env['mail.render.mixin']._replace_local_links(body)
body = tools.html_sanitize(body, sanitize_attributes=True, sanitize_style=True)
- for test_mail in test_emails:
+ for valid_email in valid_emails:
mail_values = {
'email_from': mailing.email_from,
'reply_to': mailing.reply_to,
- 'email_to': test_mail,
+ 'email_to': valid_email,
'subject': subject,
'body_html': mass_mail_layout._render({'body': body}, engine='ir.qweb', minimal_qcontext=True),
'notification': True,
'mailing_id': mailing.id,
'attachment_ids': [(4, attachment.id) for attachment in mailing.attachment_ids],
- 'auto_delete': True,
+ 'auto_delete': False, # they are manually deleted after notifying the document
'mail_server_id': mailing.mail_server_id.id,
}
mail = self.env['mail.mail'].sudo().create(mail_values)
mails_sudo |= mail
mails_sudo.send()
+
+ notification_messages = []
+ if invalid_candidates:
+ notification_messages.append(
+ _('Mailing addresses incorrect: %s', ', '.join(invalid_candidates)))
+
+ for mail_sudo in mails_sudo:
+ if mail_sudo.state == 'sent':
+ notification_messages.append(
+ _('Test mailing successfully sent to %s', mail_sudo.email_to))
+ elif mail_sudo.state == 'exception':
+ notification_messages.append(
+ _('Test mailing could not be sent to %s:
%s',
+ mail_sudo.email_to,
+ mail_sudo.failure_reason)
+ )
+
+ # manually delete the emails since we passed 'auto_delete: False'
+ mails_sudo.unlink()
+
+ if notification_messages:
+ self.mass_mailing_id._message_log(body='