这个问题是由paul_h提出的,但我太新了,无法对(希望)相关信息发表评论。我对imapClient有同样的问题,而且它显然不是特定于Python / Windows版本的。 Paul H在胜利10上运行Python 2.7.11。imapclient error on Windows
我正在运行3.4.3,甚至升级到3.5.1。在win7上,甚至尝试了一台旧的Vista机器。
import imapclient
imapObj = imapclient.IMAPClient('imap.gmail.com', ssl=True)
它返回:
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
imapObj = imapclient.IMAPClient('imap.gmail.com', ssl=True)
File "C:\Python\lib\site-packages\imapclient\imapclient.py", line 152, in __init__
self._imap = self._create_IMAP4()
File "C:\Python\lib\site-packages\imapclient\imapclient.py", line 164, in _create_IMAP4
self._timeout)
File "C:\Python\lib\site-packages\imapclient\tls.py", line 153, in __init__
imaplib.IMAP4.__init__(self, host, port)
File "C:\Python\lib\imaplib.py", line 189, in __init__
self.open(host, port)
File "C:\Python\lib\site-packages\imapclient\tls.py", line 159, in open
self.sock = wrap_socket(sock, self.ssl_context, host)
File "C:\Python\lib\site-packages\imapclient\tls.py", line 126, in wrap_socket
ssl_context = create_default_context()
File "C:\Python\lib\site-packages\imapclient\tls.py", line 109, in create_default_context
context.load_verify_locations(cadata=certs)
File "C:\Python\lib\site-packages\backports\ssl\core.py", line 654, in load_verify_locations
self._ctx.load_verify_locations(cafile, capath)
File "C:\Python\lib\site-packages\OpenSSL\SSL.py", line 528, in load_verify_locations
_raise_current_error()
File "C:\Python\lib\site-packages\OpenSSL\_util.py", line 48, in exception_from_error_queue
raise exception_type(errors)
OpenSSL.SSL.Error: []
同时股票imaplib与ssl罚款。
M = imaplib.IMAP4_SSL('imap.gmail.com')
抱歉开始一个新问题,但我不想发布这个问题作为答案。
答案 0 :(得分:3)
我也遇到了这个问题,我正在等待有人回答这个问题但是花了很长时间。 我们使用IMAPclient 1.0.1并得到此错误,因此解决方法是安装imapclient 0.13
pip uninstall imapclient
pip install imapclient==0.13
答案 1 :(得分:3)
这是一个适合我的解决方法(Python 3.5,Windows 10):
from backports import ssl
from imapclient import IMAPClient
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
imapObj = IMAPClient('imap.gmail.com', ssl=True, ssl_context=context)
上面的代码源自开发人员的解决方法here,但我发现我只需要定义context
的一行来使其工作。指定其他SSL / TLS协议也有效。