Fix mail module for python 3.7.0 (#44550) (#44552)

In python 3.7.0, changes in `ssl.py` breaks `smtplib.SMTP_SSL`, which
then breaks `mail` module in ansible.

Run this line in python shell:

    import smtplib;smtplib.SMTP_SSL().connect(host='smtp.gmail.com', port=465)

Before python 3.7.0, we will get:

    (220, b'smtp.gmail.com ESMTP j13-v6sm3086685pgq.56 - gsmtp')

In python 3.7.0, we get such error at `lib/python3.7/ssl.py` line 843, method `_create`:

    ValueError: server_hostname cannot be an empty string or start with a leading dot.

The ssl module is using host info on SMTP_SSL instance, which is not set.
The fix/workaround is simple, just pass host info to it:

    import smtplib;smtplib.SMTP_SSL(host='smtp.gmail.com').connect(host='smtp.gmail.com', port=465)

Fixes: #44550

Signed-off-by: Guo Qiao <guoqiao@gmail.com>
This commit is contained in:
guoqiao 2018-08-23 18:50:54 +12:00 committed by Jordan Borean
parent 4e895c10ba
commit 6ef9c2d7b7
2 changed files with 3 additions and 1 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- fix mail module for python 3.7.0 (https://github.com/ansible/ansible/pull/44552)

View file

@ -248,7 +248,7 @@ def main():
try:
if secure != 'never':
try:
smtp = smtplib.SMTP_SSL(timeout=timeout)
smtp = smtplib.SMTP_SSL(host=host, timeout=timeout)
code, smtpmessage = smtp.connect(host, port=port)
secure_state = True
except ssl.SSLError as e: