diff --git a/addons/mail/models/mail_mail.py b/addons/mail/models/mail_mail.py index 2937999bdb5..922d55b0f68 100644 --- a/addons/mail/models/mail_mail.py +++ b/addons/mail/models/mail_mail.py @@ -358,6 +358,9 @@ class MailMail(models.Model): # /!\ can't use mail.state here, as mail.refresh() will cause an error # see revid:odo@openerp.com-20120622152536-42b2s28lvdv3odyr in 6.1 mail._postprocess_sent_message(success_pids=success_pids, failure_type=failure_type) + except UnicodeEncodeError as exc: + _logger.exception('UnicodeEncodeError on text "%s" while processing mail ID %r.', exc.object, mail.id) + raise MailDeliveryException(_("Mail Delivery Failed"), "Invalid text: %s" % exc.object) except MemoryError: # prevent catching transient MemoryErrors, bubble up to notify user or abort cron job # instead of marking the mail as failed diff --git a/addons/test_mail/tests/test_mail_mail.py b/addons/test_mail/tests/test_mail_mail.py index eeeb22a296f..4debd669874 100644 --- a/addons/test_mail/tests/test_mail_mail.py +++ b/addons/test_mail/tests/test_mail_mail.py @@ -6,6 +6,7 @@ import itertools from odoo.addons.test_mail.tests import common as mail_common from odoo.tests import common from odoo.tools import mute_logger +from odoo.addons.base.models.ir_mail_server import MailDeliveryException class TestMail(common.SavepointCase, mail_common.MockEmails): @@ -43,3 +44,13 @@ class TestMail(common.SavepointCase, mail_common.MockEmails): self.email_to_list.extend(itertools.chain.from_iterable(sent_email['email_to'] for sent_email in self._mails if sent_email.get('email_to'))) self.assertNotIn(u'Ernest Employee ', self.email_to_list) self.assertIn(u'test@example.com', self.email_to_list) + + @mute_logger('odoo.addons.mail.models.mail_mail') + def test_mail_message_values_unicode(self): + mail = self.env['mail.mail'].create({ + 'body_html': '

Test

', + 'email_to': 'test.😊@example.com', + 'partner_ids': [(4, self.user_employee.partner_id.id)] + }) + + self.assertRaises(MailDeliveryException, mail.send)