mercurial/mail.py
changeset 5947 528c986f0162
parent 5866 dc6ed2736c81
child 5973 ea77f6f77514
--- a/mercurial/mail.py	Thu Jan 17 13:51:59 2008 -0600
+++ b/mercurial/mail.py	Fri Jan 25 16:04:32 2008 -0800
@@ -38,43 +38,39 @@
         s.login(username, password)
     return s
 
-def _sendmail(ui, sender, recipients, msg):
+class _sendmail(object):
     '''send mail using sendmail.'''
-    program = ui.config('email', 'method')
-    cmdline = '%s -f %s %s' % (program, templater.email(sender),
-                               ' '.join(map(templater.email, recipients)))
-    ui.note(_('sending mail: %s\n') % cmdline)
-    fp = os.popen(cmdline, 'w')
-    fp.write(msg)
-    ret = fp.close()
-    if ret:
-        raise util.Abort('%s %s' % (
-            os.path.basename(program.split(None, 1)[0]),
-            util.explain_exit(ret)[0]))
+
+    def __init__(self, ui, program):
+        self.ui = ui
+        self.program = program
+
+    def sendmail(self, sender, recipients, msg):
+        cmdline = '%s -f %s %s' % (
+            self.program, templater.email(sender),
+            ' '.join(map(templater.email, recipients)))
+        self.ui.note(_('sending mail: %s\n') % cmdline)
+        fp = os.popen(cmdline, 'w')
+        fp.write(msg)
+        ret = fp.close()
+        if ret:
+            raise util.Abort('%s %s' % (
+                os.path.basename(self.program.split(None, 1)[0]),
+                util.explain_exit(ret)[0]))
 
 def connect(ui):
-    '''make a mail connection. return a function to send mail.
+    '''make a mail connection. object returned has one method, sendmail.
     call as sendmail(sender, list-of-recipients, msg).'''
 
-    func =  _sendmail
-    if ui.config('email', 'method', 'smtp') == 'smtp':
-        func = _smtp(ui)
+    method = ui.config('email', 'method', 'smtp')
+    if method == 'smtp':
+        return _smtp(ui)
 
-    def send(ui, sender, recipients, msg):
-        try:
-            return func.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)
-
-    return send
+    return _sendmail(ui, method)
 
 def sendmail(ui, sender, recipients, msg):
     try:
-        send = connect(ui)
-        return send(sender, recipients, msg)
+        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))