Ошибка imapclient в 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: []

Это связано с обработкой в ​​Windows цепочек сертификатов?

Кстати, он делает то же самое для imap.gmail.com вместо домена Outlook.

2 ответа

Решение

Это не окончательный ответ, но я нашел обходной путь - удалить imapclient и установить более старую версию. Версия 0.13 (и 0.11) работала для меня, однако после обновления до 1.0.1 я получил то же сообщение об ошибке, которое вы опубликовали.

Чтобы удалить imapclient с помощью pip, запустите:

pip uninstall imapclient

Чтобы установить старую версию 0.13 с pip, запустите:

pip install imapclient==0.13

Чтобы проверить версию imapclient, из интерактивной оболочки запустите:

>>> 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)

Приведенный выше код был получен из обходного пути разработчика, но я обнаружил, что мне нужна только одна строка, определяющая context чтобы это работало. Указание других протоколов SSL/TLS также работало.

Другие вопросы по тегам