标题基本概括了所有内容。我可以使用以下方法访问我的Exchange服务器:

credentials = Credentials(
    username='DOMAIN\\username',
    password='PASSWORD')

exchange_account = Account(
    primary_smtp_address='[email protected]',
    credentials=credentials,
    autodiscover=True,
    access_type=DELEGATE)

sent_items = exchange_account.sent.all().filter(datetime_received__range=(last_date, now))[:10]


但是,它突然停止工作,并且尽管凭据仍然有效(尽管它们在Outlook和Android电子邮件客户端上都可以工作),但最后一行仍抛出exchangelib.errors.ErrorAccessDenied

我猜服务器以某种方式检测到该活动,并认为它是欺诈性的而将其阻止。有人可以建议我需要问一下Exchange服务器管理员来查找并纠正吗?如果有帮助,它将托管在intermedia.net上。

我非常感谢您的帮助。

最佳答案

[将评论提取为实际答案]

当请求一个您无权访问的项目或私有项目上的私有字段时,ErrorAccessDenied通常由服务器引发。听起来很奇怪,但您发送的文件夹中可能包含您无权访问的项目。您可以通过小块地获取项目来缩小范围,直到遇到引起ErrorAccessDenied的问题为止。如果启用调试日志记录,则请求和响应XML将告诉您确切的ID。

您可以通过仅请求已发送邮件中的非私有字段来解决此问题,例如exchange_account.sent.all().only('subject', 'start', 'end')。否则,如果您可以找到行为异常的项目并允许将其删除,则只需执行此操作即可。

关于python - exchangelib突然抛出ErrorAccessDenied,但是凭据仍然有效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55200018/

10-12 21:10