2016-01-11 40 views
6

Môi trường mà tôi gặp sự cố trên: Python 2.7.11 trên Windows10 (được cập nhật). Python được cài đặt thông qua một msi. Tôi đã kiểm tra cài đặt PATH trong cài đặt và nó được đặt thành c: \ Python27.lỗi imapclient trên Windows

này hoạt động trên Mac:

from imapclient import IMAPClient 

IMAPClient("imap-mail.outlook.com", use_uid=True, ssl=(True)) 

Nhưng trên Windows, nếu barfs như vậy:

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: [] 

Đây có phải là để làm với việc xử lý cửa sổ của chuỗi chứng nhận?

Ngẫu nhiên, nó cũng giống như vậy đối với imap.gmail.com ở vị trí của miền Outlook.

+0

Có thể liên quan đến backport.ssl ​​- https://github.com/alekstorm/backports.ssl/issues –

+0

Bạn chưa đăng thông báo lỗi thực sự. – Ben

+0

Ben, điều tôi dán vào kết thúc trong "OpenSSL.SSL.Error" không phải là một thông báo lỗi? –

Trả lời

7

Đây không phải là câu trả lời cuối cùng, nhưng công việc xung quanh mà tôi đã tìm thấy là gỡ cài đặt imapclient và cài đặt phiên bản cũ hơn. Phiên bản 0.13 (và 0.11) đã làm việc cho tôi, tuy nhiên sau khi nâng cấp lên 1.0.1 tôi nhận được thông báo lỗi tương tự mà bạn đã đăng.

Để gỡ bỏ cài đặt imapclient với pip, chạy:

pip uninstall imapclient

Để cài đặt phiên bản cũ 0.13 với pip, chạy:

pip install imapclient==0.13

Để xác minh các phiên bản của imapclient, từ tương tác shell chạy:

>>> import imapclient >>> imapclient.__version__

+0

Tôi đang đọc sách của bạn ngay bây giờ. Và vấn đề này vẫn tồn tại vào tháng 7 năm 2017, 1,5 năm sau! Giải pháp của bạn đã sửa nó! Cảm ơn một lần nữa! –

3

Dưới đây là một cách giải quyết mà làm việc cho tôi (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) 

Đoạn mã trên được bắt nguồn từ các nhà phát triển workaround here, nhưng tôi thấy tôi chỉ cần một dòng xác định context Để làm cho nó hoạt động. Việc chỉ định các giao thức SSL/TLS khác cũng hoạt động.

Các vấn đề liên quan