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:
parent
4e895c10ba
commit
6ef9c2d7b7
2 changed files with 3 additions and 1 deletions
2
changelogs/fragments/44552-mail-py370-compat.yml
Normal file
2
changelogs/fragments/44552-mail-py370-compat.yml
Normal file
|
@ -0,0 +1,2 @@
|
|||
bugfixes:
|
||||
- fix mail module for python 3.7.0 (https://github.com/ansible/ansible/pull/44552)
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue