这是我使用SSL上下文的代码:
with smtplib.SMTP(host, port) as smtpserver:
smtpserver.ehlo()
smtpserver.starttls(context=ssl.create_default_context())
... etc ...
默认上下文对象是一个可以在多线程程序中共享和重用的常量吗?我的意思是只创造一次:
SSL_CONTEXT = ssl.create_default_context()
然后:
with smtplib.SMTP(host, port) as smtpserver:
smtpserver.ehlo()
smtpserver.starttls(context=SSL_CONTEXT)
发送的每条消息。
答案 0 :(得分:1)
每个连接都应具有自己的上下文。您可以在http.client的Python源代码中看到HTTPSConnection为每个连接创建新的上下文。
https://github.com/python/cpython/blob/master/Lib/http/client.py
答案 1 :(得分:0)
确实ssl.create_default_context()
可以在初始化之后再次使用(因为它的目的):
import ssl, smtplib
>>> smtp = smtplib.SMTP("mail.python.org", port=587)
>>> context = ssl.create_default_context()
>>> smtp.starttls(context=context)
(220,b'2.0.0准备启动TLS')