From cf15757558d7e6ff82a55e4144fad7a3cad55e13 Mon Sep 17 00:00:00 2001
From: Martijn Vermaat <martijn@vermaat.name>
Date: Tue, 21 Oct 2014 20:10:11 +0200
Subject: [PATCH] Don't crash on mail errors in the batch scheduler

Fixes #30
---
 mutalyzer/Scheduler.py | 28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/mutalyzer/Scheduler.py b/mutalyzer/Scheduler.py
index 400c81c5..e4816720 100644
--- a/mutalyzer/Scheduler.py
+++ b/mutalyzer/Scheduler.py
@@ -122,10 +122,30 @@ Mutalyzer batch scheduler""" % url)
         message["From"] = settings.EMAIL
         message["To"] = mailTo
 
-        smtpInstance = smtplib.SMTP()
-        smtpInstance.connect()
-        smtpInstance.sendmail(settings.EMAIL, mailTo, message.as_string())
-        smtpInstance.quit()
+        try:
+            smtpInstance = smtplib.SMTP('localhost')
+        except smtplib.SMTPConnectError as e:
+            print 'Could not send email to %s: (%s) %s' % (mailTo,
+                                                           unicode(e.smtp_code),
+                                                           unicode(e.smtp_error))
+            return
+        except IOError as e:
+            print 'Could not send email to %s: %s' % (mailTo, unicode(e))
+            return
+
+        try:
+            smtpInstance.sendmail(settings.EMAIL, mailTo, message.as_string())
+        except smtplib.SMTPRecipientsRefused as e:
+            for address, (code, error) in e.recipients.items():
+                print 'Could not send email to %s: (%s) %s' % (address,
+                                                               code,
+                                                               error)
+        except smtplib.SMTPResponseException as e:
+            print 'Could not send email to %s: (%s) %s' % (mailTo,
+                                                           unicode(e.smtp_code),
+                                                           unicode(e.smtp_error))
+        finally:
+            smtpInstance.quit()
     #__sendMail
 
     def __processFlags(self, O, flags) :
-- 
GitLab