2017-01-28 18 views
0

这是使用SSL上下文我的代码:每次我需要一个新的ssl.create_default_context()吗?

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

事实上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“)

https://docs.python.org/3/library/ssl.html#best-defaults

+0

恐怕所示的例子和链接的文档没有提到可重用性。为每个SMTP连接创建一个新的上下文。 – VPfB

+0

它是否说过不重复使用它,你试过吗? –

+0

我找不到任何东西,这就是为什么我写这个问题。我没有尝试。如果它有效,那么在没有注意到的情况下仍然有很小的可能性。我宁愿避免这种风险。无论如何,我的确同意你在这种背景下的预期目的,并希望可复用性得到确认。 – VPfB

相关问题