erreur imapclient sous Windows

Environnement sur lequel j’ai des problèmes: Python 2.7.11 sur Windows10 (mis à jour à jour). Python installé via un msi. J’ai vérifié les parameters PATH dans les parameters, et il est défini sur c: \ Python27.

Cela fonctionne sur Mac:

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

Mais sous Windows, si barfs comme ça:

 Traceback (most recent call last): File "test_outlook_imap.py", line 3, in  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: [] 

Est-ce que cela concerne la gestion par Windows des chaînes de certificates?

Incidemment, il en va de même pour imap.gmail.com à la place du domaine Outlook.

Ce n’est pas une réponse définitive, mais le travail que j’ai trouvé consiste à désinstaller imapclient et à installer une version plus ancienne. La version 0.13 (et 0.11) a fonctionné pour moi, mais après la mise à niveau vers la version 1.0.1, j’ai reçu le même message d’erreur que vous avez posté.

Pour désinstaller imapclient avec pip, exécutez:

pip uninstall imapclient

Pour installer l’ancienne version 0.13 avec pip, lancez:

pip install imapclient==0.13

Pour vérifier la version de imapclient, à partir du shell interactif exécuté:

>>> import imapclient >>> imapclient.__version__

Voici une solution de contournement qui a fonctionné pour moi (Python 3.5, Windows 10), et qui ne nécessite pas de rétrogradation:

 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) 

Le code ci-dessus a été dérivé de la solution de contournement du développeur ici , mais j’ai trouvé que je n’avais besoin que du context définissant une seule ligne pour le faire fonctionner. La spécification d’autres protocoles SSL / TLS a également fonctionné.