# HG changeset patch # User Christian Ebert # Date 1189176522 -7200 # Node ID 23889160905a1b09fffe1c07378e9fc1827606eb # Parent 5b81c1cc6ebe39522ab055715658514b60d57712 Catch smtp exceptions diff --git a/hgext/patchbomb.py b/hgext/patchbomb.py --- a/hgext/patchbomb.py +++ b/hgext/patchbomb.py @@ -224,9 +224,8 @@ def patchbomb(ui, repo, *revs, **opts): 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 @@ def patchbomb(ui, repo, *revs, **opts): ui.write('\n') - if really_sending: - mailer = mail.connect(ui) parent = None sender_addr = email.Utils.parseaddr(sender)[1] @@ -411,7 +408,7 @@ def patchbomb(ui, repo, *revs, **opts): 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": diff --git a/mercurial/mail.py b/mercurial/mail.py --- a/mercurial/mail.py +++ b/mercurial/mail.py @@ -67,7 +67,13 @@ def connect(ui): 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.'''