Catch smtp exceptions 0.9.5
authorChristian Ebert <blacktrash@gmx.net>
Fri, 07 Sep 2007 16:48:42 +0200
changeset 5472 23889160905a
parent 5471 5b81c1cc6ebe
child 5473 040984468440
child 6122 800e2756c9ab
Catch smtp exceptions
hgext/patchbomb.py
mercurial/mail.py
--- a/hgext/patchbomb.py	Fri Oct 19 19:20:33 2007 +0000
+++ b/hgext/patchbomb.py	Fri Sep 07 16:48:42 2007 +0200
@@ -224,9 +224,8 @@
                 pass
             os.rmdir(tmpdir)
 
-    really_sending = not (opts['test'] or opts['mbox'])
-
-    if really_sending:
+    if not (opts['test'] or opts['mbox']):
+        # really sending
         mail.validateconfig(ui)
 
     if not (revs or opts.get('rev') or opts.get('outgoing')):
@@ -361,8 +360,6 @@
 
     ui.write('\n')
 
-    if really_sending:
-        mailer = mail.connect(ui)
     parent = None
 
     sender_addr = email.Utils.parseaddr(sender)[1]
@@ -411,7 +408,7 @@
             ui.status('Sending ', m['Subject'], ' ...\n')
             # Exim does not remove the Bcc field
             del m['Bcc']
-            mailer.sendmail(sender, to + bcc + cc, m.as_string(0))
+            mail.sendmail(ui, sender, to + bcc + cc, m.as_string(0))
 
 cmdtable = {
     "email":
--- a/mercurial/mail.py	Fri Oct 19 19:20:33 2007 +0000
+++ b/mercurial/mail.py	Fri Sep 07 16:48:42 2007 +0200
@@ -67,7 +67,13 @@
     return _sendmail(ui, method)
 
 def sendmail(ui, sender, recipients, msg):
-    return connect(ui).sendmail(sender, recipients, msg)
+    try:
+        return connect(ui).sendmail(sender, recipients, msg)
+    except smtplib.SMTPRecipientsRefused, inst:
+        recipients = [r[1] for r in inst.recipients.values()]
+        raise util.Abort('\n' + '\n'.join(recipients))
+    except smtplib.SMTPException, inst:
+        raise util.Abort(inst)
 
 def validateconfig(ui):
     '''determine if we have enough config data to try sending email.'''