Ho riscontrato il seguente comportamento percussivo oggi.smtplib.SMTP starttls non riesce con errore di decodifica avviso tlsv1
Il seguente codice funziona su Python 3.3:
smtp = smtplib.SMTP()
smtp.connect(host="smtp.gmail.com", port=587)
smtp.ehlo()
smtp.starttls()
Nel Pyhton 3.4 del codice di cui sopra non funziona, invece viene rilevato il seguente errore:
File "smtp_test.py", line 10, in <module>
smtp.starttls()
File "/usr/lib/python3.4/smtplib.py", line 676, in starttls
server_hostname=server_hostname)
File "/usr/lib/python3.4/ssl.py", line 344, in wrap_socket
_context=self)
File "/usr/lib/python3.4/ssl.py", line 540, in __init__
self.do_handshake()
File "/usr/lib/python3.4/ssl.py", line 767, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: TLSV1_ALERT_DECODE_ERROR] tlsv1 alert decode error (_ssl.c:598)
Se il codice di cui sopra viene modificato per specificare l'host e la porta nel costruttore e non utilizzare il metodo connect, come nel codice seguente, quindi funziona.
smtp = smtplib.SMTP(host="smtp.gmail.com", port=587)
smtp.ehlo()
smtp.starttls()
Il comportamento precedente si verifica con OpenSSL versione 1.0.1f e OpenSSL 1.0.1g
Qualcuno potrebbe spiegare questo comportamento a me?
Perché funziona il secondo pezzo di codice, che utilizza lo stesso metodo di connessione nel costruttore, quindi funziona? – Burmudar
perché probabilmente salva l'host all'interno del costruttore e lo riutilizza per l'estensione SNI. E la connessione probabilmente non salva l'host. –