Python/exchangelib — не удается установить соединение

Извините, что мой английский не так хорош: в домене Windows я пытаюсь подключиться к нашему серверу обмена (2010/SP3), используя пример, приведенный на сайте pypi:

from exchangelib import DELEGATE, NTLM, Account, Credentials, Configuration
import os, logging

logging.basicConfig(level=logging.DEBUG)

creds = Credentials(
    username='mydomain\\my.name', 
    password='mypassword')

config = Configuration(server='exchange.xxx.local/EWS/Exchange.asmx', credentials=creds)

account = Account(
    primary_smtp_address='[email protected]',
    credentials=creds,
    autodiscover=False,
    access_type=DELEGATE)

for item in account.inbox.all().order_by('-datetime_received')[:30]:
    print(item.subject, item.body, item.attachments)

После запуска скрипта я получаю этот вывод в консоли python:

DEBUG:exchangelib.protocol:Waiting for _protocol_cache_lock
DEBUG:exchangelib.protocol:Protocol __call__ cache miss. Adding key '('https://exchange.xxx.local/EWS/Exchange.asmx', Credentials('mydomain\\my.name', '********'), True)'
DEBUG:exchangelib.transport:Getting service auth type for https://exchange.xxx.local/EWS/Exchange.asmx
DEBUG:exchangelib.transport:Requesting b'<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"><s:Header><t:RequestServerVersion Version="Exchange2016" /></s:Header><s:Body><m:ResolveNames ReturnFullContactData="false"><m:UnresolvedEntry>mydomain\\my.name</m:UnresolvedEntry></m:ResolveNames></s:Body></s:Envelope>' from https://exchange.xxx.local/EWS/Exchange.asmx
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): exchange.xxx.local
Traceback (most recent call last):
  File "C:\CWS\Python-venv\p353-01\lib\site-packages\urllib3\connectionpool.py", line 594, in urlopen
self._prepare_proxy(conn)
  File "C:\CWS\Python-venv\p353-01\lib\site-packages\urllib3\connectionpool.py", line 810, in _prepare_proxy
conn.connect()
  File "C:\CWS\Python-venv\p353-01\lib\site-packages\urllib3\connection.py", line 294, in connect
self._tunnel()
  File "C:\seProg\python353\Lib\http\client.py", line 832, in _tunnel
message.strip()))
OSError: Tunnel connection failed: 407 Proxy Access Denied    
... (and many more lines with error messages)

Я также пробовал другие варианты с сайта exchangelib с autodiscover=True и только creds= (без config=). Безуспешно. Затем я установил редактор EWS с сайта https://ewseditor.codeplex.com/, чтобы увидеть, если подключение через EWS вообще может работать в среде моей компании. Он отлично работает с этим инструментом, просто нужно дать ему мой SMTP-адрес.

Я был бы очень признателен за любую помощь. Заранее спасибо!


person Chessyman    schedule 26.06.2017    source источник


Ответы (1)


Вероятно, вам нужно сообщить exchangelib о ваших прокси. Вы можете сделать это через переменные среды: https://github.com/ecederstrand/exchangelib/issues/123#issuecomment-295648189 или через собственный класс HTTPAdapter: https://github.com/ecederstrand/exchangelib/issues/156#issuecomment-312391095

person Erik Cederstrand    schedule 10.07.2017
comment
Спасибо - я попробовал ваше первое предложение, но оно не сработало (во-вторых, я не знаю, как создать класс HTTPAdapter). По словам моих администраторов обмена и сети, это не проблема прокси, потому что использование прокси не требуется во внутреннем (доменном) трафике: Исключение для всех адресов типа: *.xxx.local. Наш сервер обмена — exchange.xxx.local. Я проверил это с помощью библиотеки запросов с помощью простого r = requests.get('http://exchange.xxx.local'), и это сработало! Таким образом, использование прокси-сервера не требуется - я был бы признателен за еще одну подсказку! - person Chessyman; 12.07.2017
comment
Тест requests.get('http://exchange.xxx.local') не затрагивает путь кода TLS, в котором возникает ошибка. Вместо этого попробуйте использовать requests.get('https://exchange.xxx.local/EWS/Exchange.asmx'). В противном случае вы можете попробовать раздел устранения неполадок на странице github.com/ecederstrand/exchangelib#troubleshooting. - person Erik Cederstrand; 30.07.2017