diff -r cf1304fbc184 -r 14a60a0f7122 mercurial/mail.py --- a/mercurial/mail.py Tue Mar 26 02:27:23 2013 +0900 +++ b/mercurial/mail.py Tue Mar 26 02:27:43 2013 +0900 @@ -57,6 +57,32 @@ self.does_esmtp = 0 return (resp, reply) +if util.safehasattr(smtplib.SMTP, '_get_socket'): + class SMTPS(smtplib.SMTP): + '''Derived class to verify the peer certificate for SMTPS. + + This class allows to pass any keyword arguments to SSL socket creation. + ''' + def __init__(self, sslkwargs, keyfile=None, certfile=None, **kwargs): + self.keyfile = keyfile + self.certfile = certfile + smtplib.SMTP.__init__(self, **kwargs) + self.default_port = smtplib.SMTP_SSL_PORT + self._sslkwargs = sslkwargs + + def _get_socket(self, host, port, timeout): + if self.debuglevel > 0: + print >> stderr, 'connect:', (host, port) + new_socket = socket.create_connection((host, port), timeout) + new_socket = sslutil.ssl_wrap_socket(new_socket, + self.keyfile, self.certfile, + **self._sslkwargs) + self.file = smtplib.SSLFakeFile(new_socket) + return new_socket +else: + def SMTPS(sslkwargs, keyfile=None, certfile=None, **kwargs): + raise util.Abort(_('SMTPS requires Python 2.6 or later')) + def _smtp(ui): '''build an smtp connection and return a function to send mail''' local_hostname = ui.config('smtp', 'local_hostname')