[IMP] mail: avoid sending an email twice
[odoo/odoo.git] / addons / mail / mail_mail.py
index 3d51853..f474a07 100644 (file)
@@ -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