From c72eec46f9a6e4ed2c86f37c624ebc3c42471816 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Mon, 14 May 2018 12:02:34 +0200 Subject: [PATCH] [FIX] mail: do not shadow SMTP errors with QUIT When an exception is raised during the course of a normal SMTP session, smtplib's `sendmail()` method will close the channel automatically, so any further attempt at sending SMTP commands will fail with an SMTPServerDisconnected error, even just calling `smtp.quit()`. This will shadow the original error, and make debugging harder. Fixes #1493 --- odoo/addons/base/models/ir_mail_server.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/odoo/addons/base/models/ir_mail_server.py b/odoo/addons/base/models/ir_mail_server.py index a0d08b6295f..75d7f082196 100644 --- a/odoo/addons/base/models/ir_mail_server.py +++ b/odoo/addons/base/models/ir_mail_server.py @@ -447,15 +447,13 @@ class IrMailServer(models.Model): try: message_id = message['Message-Id'] smtp = smtp_session - try: - smtp = smtp or self.connect( - smtp_server, smtp_port, smtp_user, smtp_password, - smtp_encryption, smtp_debug, mail_server_id=mail_server_id) - smtp.sendmail(smtp_from, smtp_to_list, message.as_string()) - finally: - # do not quit() a pre-established smtp_session - if smtp is not None and not smtp_session: - smtp.quit() + smtp = smtp or self.connect( + smtp_server, smtp_port, smtp_user, smtp_password, + smtp_encryption, smtp_debug, mail_server_id=mail_server_id) + smtp.sendmail(smtp_from, smtp_to_list, message.as_string()) + # do not quit() a pre-established smtp_session + if not smtp_session: + smtp.quit() except Exception as e: params = (ustr(smtp_server), e.__class__.__name__, ustr(e)) msg = _("Mail delivery failed via SMTP server '%s'.\n%s: %s") % params