Python Подключение к Exchange / w Windows Auth - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь создать сценарий в сценарии Python 3.8 , который может подключаться к серверу Exchange и получать электронную почту из почтового ящика. Я пытаюсь пройти проверку подлинности с помощью Exchange с использованием текущего пользователя, прошедшего проверку подлинности. Я могу подтвердить подлинность, если я использую имя пользователя и пароль. (Стараясь не хранить никаких паролей или чего-либо еще, просто используйте аутентифицированного пользователя.)

Я использую Python 3.8 и Exchangelib для подключения Обмен , но не могу понять, как использовать Windows Auth (если возможно).

Любая помощь, чтобы попытаться выполнить sh приветствуется.

Спасибо

Пример того, что я пытаюсь сделать:

from exchangelib import DELEGATE, IMPERSONATION, Account, Credentials, OAuth2Credentials, \
    OAuth2AuthorizationCodeCredentials, FaultTolerance, Configuration, NTLM, GSSAPI, SSPI, \
    OAUTH2, Build, Version
from exchangelib.autodiscover import AutodiscoverProtocol

exchange_email = 'mailboxIWantToAccess@domain.com'

account = Account(exchange_email, autodiscover=True)
# account = Account(exchange_email, credentials=credentials, autodiscover=True)

account.root.refresh()
account.public_folders_root.refresh()

print(account.root.tree())

Ошибка, которую я получаю:

Traceback (most recent call last):
  File "c:/Users/jk354/Documents/git.ourgitserver.com/client-info/script-ex.py", line 233, in <module>
    account = Account(exchange_email, autodiscover=True)
  File "C:\Users\jk354\AppData\Local\Programs\Python\Python38-32\lib\site-packages\exchangelib\account.py", line 85, in __init__
    self.ad_response, self.protocol = discover(
  File "C:\Users\jk354\AppData\Local\Programs\Python\Python38-32\lib\site-packages\exchangelib\autodiscover\discovery.py", line 23, in discover
    return Autodiscovery(
  File "C:\Users\jk354\AppData\Local\Programs\Python\Python38-32\lib\site-packages\exchangelib\autodiscover\discovery.py", line 88, in discover
    ad_protocol = autodiscover_cache[cache_key]
  File "C:\Users\jk354\AppData\Local\Programs\Python\Python38-32\lib\site-packages\exchangelib\autodiscover\cache.py", line 97, in __getitem__
    protocol = AutodiscoverProtocol(config=Configuration(
  File "C:\Users\jk354\AppData\Local\Programs\Python\Python38-32\lib\site-packages\exchangelib\protocol.py", line 73, in __init__
    self._session_pool = self._create_session_pool()
  File "C:\Users\jk354\AppData\Local\Programs\Python\Python38-32\lib\site-packages\exchangelib\protocol.py", line 160, in _create_session_pool
    session_pool.put(self.create_session(), block=False)
  File "C:\Users\jk354\AppData\Local\Programs\Python\Python38-32\lib\site-packages\exchangelib\protocol.py", line 233, in create_session
    with self.credentials.lock:
AttributeError: 'NoneType' object has no attribute 'lock'

https://github.com/ecederstrand/exchangelib

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

Я использую exchangelib в среде Windows / Exchangeserver, это мой код входа:

import getpass
from exchangelib import Configuration
from exchangelib import Credentials, Account

def login():
    email = 'user@domain.com'
    passwd = getpass.getpass(prompt='Password: ')
    user_credentials = Credentials(email, passwd)
    config = Configuration(server='exchangeserver',
                           credentials=user_credentials)
    account = Account(primary_smtp_address=email, config=config,
                           credentials=user_credentials, autodiscover=False) #maybe try =True
    return account

def main():
    user_account = authenticate()
    print(user_account.root.tree()) #printing the inbox

main()
input('Press enter to exit')
0 голосов
/ 13 февраля 2020

Сказал винт это и переключился на C#. Я использую EWS Managed API.

https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/get-started-with-ews-managed-api-client-applications

Я могу подключиться к Exchange, используя аутентифицированного пользователя, используя эту строку:

service.UseDefaultCredentials = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...