diff -r eabdf3c25b8b -r 569d662816de mercurial/mail.py --- a/mercurial/mail.py Mon Jul 16 17:49:17 2018 -0400 +++ b/mercurial/mail.py Mon Jul 16 18:16:26 2018 -0400 @@ -82,6 +82,15 @@ self.file = smtplib.SSLFakeFile(new_socket) return new_socket +def _pyhastls(): + """Returns true iff Python has TLS support, false otherwise.""" + try: + import ssl + getattr(ssl, 'HAS_TLS', False) + return True + except ImportError: + return False + def _smtp(ui): '''build an smtp connection and return a function to send mail''' local_hostname = ui.config('smtp', 'local_hostname') @@ -89,7 +98,7 @@ # backward compatible: when tls = true, we use starttls. starttls = tls == 'starttls' or stringutil.parsebool(tls) smtps = tls == 'smtps' - if (starttls or smtps) and not util.safehasattr(socket, 'ssl'): + if (starttls or smtps) and not _pyhastls(): raise error.Abort(_("can't use TLS: Python SSL support not installed")) mailhost = ui.config('smtp', 'host') if not mailhost: