【发布时间】:2020-01-29 20:19:49
【问题描述】:
我正在尝试在 Python 3.8 脚本中创建一个脚本,该脚本可以连接到 Exchange 服务器并从邮箱中检索电子邮件。我正在尝试使用当前经过身份验证的用户通过 Exchange 进行身份验证。如果我使用用户名和密码,我可以很好地进行身份验证。 (尽量不存储任何密码或任何东西,只使用当前经过身份验证的用户。)
我正在使用 Python 3.8 和 Exchangelib 连接 Exchange,但不知道如何使用 Windows Auth(如果可能)。 p>
感谢您尝试完成此操作的任何帮助。
谢谢
我正在尝试做的示例:
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'
【问题讨论】:
-
Windows 身份验证是什么意思? NTLM? SSPI?克伯罗斯? exchangelib 不会自动检测您要使用的身份验证类型,因此您必须使用
Account的auth_type参数显式指定它。见github.com/ecederstrand/exchangelib#setup-and-connecting -
@ErikCederstrand 我不完全确定我会使用哪一个。在找不到任何我正在尝试做的事情的好例子之前,我从来没有做过这样的事情。我尝试设置 auth_type 但仍然获得相同的结果。
标签: python python-3.x windows-authentication exchangelib