Windows 上的 imapclient 错误
imapclient error on Windows
我遇到问题的环境:Python 2.7.11 Windows10(已更新)。 Python 通过 msi 安装。我检查了设置中的 PATH 设置,它设置为 c:\Python27.
这适用于 Mac:
from imapclient import IMAPClient
IMAPClient("imap-mail.outlook.com", use_uid=True, ssl=(True))
但是在 Windows,如果 barfs 喜欢这样:
Traceback (most recent call last):
File "test_outlook_imap.py", line 3, in <module>
IMAPClient("imap-mail.outlook.com", use_uid=True, ssl=(True))
File "C:\Python27\lib\site-packages\imapclient\imapclient.py", line 152, in __init__
self._imap = self._create_IMAP4()
File "C:\Python27\lib\site-packages\imapclient\imapclient.py", line 164, in _create_IMAP4
self._timeout)
File "C:\Python27\lib\site-packages\imapclient\tls.py", line 153, in __init__
imaplib.IMAP4.__init__(self, host, port)
File "C:\Python27\lib\imaplib.py", line 173, in __init__
self.open(host, port)
File "C:\Python27\lib\site-packages\imapclient\tls.py", line 159, in open
self.sock = wrap_socket(sock, self.ssl_context, host)
File "C:\Python27\lib\site-packages\imapclient\tls.py", line 126, in wrap_socket
ssl_context = create_default_context()
File "C:\Python27\lib\site-packages\imapclient\tls.py", line 109, in create_default_context
context.load_verify_locations(cadata=certs)
File "C:\Python27\lib\site-packages\backports\ssl\core.py", line 654, in load_verify_locations
self._ctx.load_verify_locations(cafile, capath)
File "C:\Python27\lib\site-packages\OpenSSL\SSL.py", line 528, in load_verify_locations
_raise_current_error()
File "C:\Python27\lib\site-packages\OpenSSL\_util.py", line 48, in exception_from_error_queue
raise exception_type(errors)
OpenSSL.SSL.Error: []
这与 Window 对证书链的处理有关吗?
顺便说一下,它对 imap.gmail.com 代替 Outlook 域执行相同的操作。
这不是最终答案,但我发现的解决方法是卸载 imapclient 并安装旧版本。版本 0.13(和 0.11)对我有用,但是在升级到 1.0.1 后,我收到了与您发布的相同的错误消息。
要用pip卸载imapclient,运行:
pip uninstall imapclient
要使用 pip 安装旧的 0.13 版本,运行:
pip install imapclient==0.13
验证imapclient版本,来自交互shell 运行:
>>> import imapclient
>>> imapclient.__version__
这是一个对我有用的解决方法(Python 3.5,Windows 10),并且不需要降级:
from backports import ssl
from imapclient import IMAPClient
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
server = IMAPClient('imap.gmail.com', ssl=True, ssl_context=context)
以上代码源自开发人员的解决方法 here,但我发现我只需要一行定义 context
即可使其工作。指定其他 SSL/TLS 协议也有效。
更新: 这个错误 should be fixed 自 IMAPClient 2.x
我遇到问题的环境:Python 2.7.11 Windows10(已更新)。 Python 通过 msi 安装。我检查了设置中的 PATH 设置,它设置为 c:\Python27.
这适用于 Mac:
from imapclient import IMAPClient
IMAPClient("imap-mail.outlook.com", use_uid=True, ssl=(True))
但是在 Windows,如果 barfs 喜欢这样:
Traceback (most recent call last):
File "test_outlook_imap.py", line 3, in <module>
IMAPClient("imap-mail.outlook.com", use_uid=True, ssl=(True))
File "C:\Python27\lib\site-packages\imapclient\imapclient.py", line 152, in __init__
self._imap = self._create_IMAP4()
File "C:\Python27\lib\site-packages\imapclient\imapclient.py", line 164, in _create_IMAP4
self._timeout)
File "C:\Python27\lib\site-packages\imapclient\tls.py", line 153, in __init__
imaplib.IMAP4.__init__(self, host, port)
File "C:\Python27\lib\imaplib.py", line 173, in __init__
self.open(host, port)
File "C:\Python27\lib\site-packages\imapclient\tls.py", line 159, in open
self.sock = wrap_socket(sock, self.ssl_context, host)
File "C:\Python27\lib\site-packages\imapclient\tls.py", line 126, in wrap_socket
ssl_context = create_default_context()
File "C:\Python27\lib\site-packages\imapclient\tls.py", line 109, in create_default_context
context.load_verify_locations(cadata=certs)
File "C:\Python27\lib\site-packages\backports\ssl\core.py", line 654, in load_verify_locations
self._ctx.load_verify_locations(cafile, capath)
File "C:\Python27\lib\site-packages\OpenSSL\SSL.py", line 528, in load_verify_locations
_raise_current_error()
File "C:\Python27\lib\site-packages\OpenSSL\_util.py", line 48, in exception_from_error_queue
raise exception_type(errors)
OpenSSL.SSL.Error: []
这与 Window 对证书链的处理有关吗?
顺便说一下,它对 imap.gmail.com 代替 Outlook 域执行相同的操作。
这不是最终答案,但我发现的解决方法是卸载 imapclient 并安装旧版本。版本 0.13(和 0.11)对我有用,但是在升级到 1.0.1 后,我收到了与您发布的相同的错误消息。
要用pip卸载imapclient,运行:
pip uninstall imapclient
要使用 pip 安装旧的 0.13 版本,运行:
pip install imapclient==0.13
验证imapclient版本,来自交互shell 运行:
>>> import imapclient
>>> imapclient.__version__
这是一个对我有用的解决方法(Python 3.5,Windows 10),并且不需要降级:
from backports import ssl
from imapclient import IMAPClient
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
server = IMAPClient('imap.gmail.com', ssl=True, ssl_context=context)
以上代码源自开发人员的解决方法 here,但我发现我只需要一行定义 context
即可使其工作。指定其他 SSL/TLS 协议也有效。
更新: 这个错误 should be fixed 自 IMAPClient 2.x