2016-01-11 17 views
6

Umgebung, die ich Probleme habe: Python 2.7.11 auf Windows10 (aktualisiert auf dem neuesten Stand). Python installiert über eine MSI. Ich habe die PATH-Einstellungen in den Einstellungen überprüft und sie auf c: \ Python27 gesetzt.imapclient Fehler unter Windows

Dies funktioniert auf Mac:

from imapclient import IMAPClient 

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

Aber unter Windows, wenn barfs wie so:

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

Dies ist mit Fenster Bei der Verarbeitung von Zertifikatsketten zu tun?

Übrigens tut es dasselbe für imap.gmail.com anstelle der Outlook-Domäne.

+0

Könnte etwas mit backport.ssl ​​zu tun haben - https://github.com/alekstorm/backports.ssl/issues –

+0

Sie haben die eigentliche Fehlermeldung nicht gepostet. – Ben

+0

Ben, was ich in "OpenSSL.SSL.Error" eingefügt habe, ist keine Fehlermeldung? –

Antwort

7

Dies ist keine endgültige Antwort, aber die Arbeit, die ich gefunden habe, ist imapclient zu deinstallieren und eine ältere Version zu installieren. Version 0.13 (und 0.11) funktionierte für mich, aber nach dem Upgrade auf 1.0.1 habe ich die gleiche Fehlermeldung erhalten, die Sie gepostet haben.

Um imapclient mit pip zu deinstallieren, führen:

pip uninstall imapclient

die ältere 0.13 Version mit pip zu installieren, führen:

pip install imapclient==0.13

die Version von imapclient Um zu überprüfen, von der interaktiver Shell-Lauf:

>>> import imapclient

+0

ich Ihr Buch jetzt lesen. Und dieses Problem besteht immer noch im Juli 2017, 1,5 Jahre später! Deine Lösung hat es behoben! Danke noch einmal! –

3

Hier ist eine Abhilfe, die für mich (Python 3.5, Microsoft Windows 10) gearbeitet:

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) 

Der obige Code von der Problemumgehung Entwickler abgeleitet wurde here, aber ich fand, ich brauchte nur die eine Linie definieren context damit es funktioniert. Die Angabe anderer SSL/TLS-Protokolle funktionierte ebenfalls.