diff --git a/addons/mail/mail_mail.py b/addons/mail/mail_mail.py index 3d5185379ac..f474a072c22 100644 --- a/addons/mail/mail_mail.py +++ b/addons/mail/mail_mail.py @@ -274,6 +274,12 @@ class mail_mail(osv.Model): except Exception: pass + # Writing on the mail object may fail (e.g. lock on user) which + # would trigger a rollback *after* actually sending the email. + # To avoid sending twice the same email, provoke the failure earlier + mail.write({'state': 'exception'}) + mail_sent = False + # build an RFC2822 email.message.Message object and send it without queuing res = None for email in email_list: @@ -299,9 +305,6 @@ class mail_mail(osv.Model): if res: mail.write({'state': 'sent', 'message_id': res}) mail_sent = True - else: - mail.write({'state': 'exception'}) - mail_sent = False # /!\ can't use mail.state here, as mail.refresh() will cause an error # see revid:odo@openerp.com-20120622152536-42b2s28lvdv3odyr in 6.1