From b1623bc558ce11c5de9641438e0bb66c12c89676 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 8 Aug 2019 19:29:23 +0530 Subject: [PATCH] py3: More fixes --- src/calibre/utils/smtp.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/calibre/utils/smtp.py b/src/calibre/utils/smtp.py index 12d49d8f48..93fb3cf73c 100644 --- a/src/calibre/utils/smtp.py +++ b/src/calibre/utils/smtp.py @@ -13,7 +13,7 @@ This module implements a simple commandline SMTP client that supports: import sys, traceback, os, socket, encodings.idna as idna from calibre import isbytestring from calibre.constants import ispy3, iswindows -from polyglot.builtins import unicode_type +from polyglot.builtins import unicode_type, as_unicode def decode_fqdn(fqdn): @@ -35,7 +35,7 @@ def safe_localhost(): # Some mail servers have problems with non-ascii local hostnames, see # https://bugs.launchpad.net/bugs/1256549 try: - local_hostname = idna.ToASCII(fqdn) + local_hostname = as_unicode(idna.ToASCII(fqdn)) except Exception: local_hostname = 'localhost.localdomain' else: @@ -162,6 +162,10 @@ def sendmail(msg, from_, to, localhost=None, verbose=0, timeout=None, if verify_server_cert: import ssl context = ssl.create_default_context(cafile=cafile) + if not getattr(s, '_host', None) and ispy3: + # needed because as of python 3.7 starttls expects _host to be set, + # bu we cant set it via the constructor + s._host = relay s.starttls(context=context) s.ehlo() if username is not None and password is not None: