【问题标题】:exchangelib suddenly throws ErrorAccessDenied, but credentials are still validexchangelib 突然抛出 ErrorAccessDenied,但凭据仍然有效
【发布时间】:2019-04-10 19:14:28
【问题描述】:

标题几乎说明了一切。我可以使用以下方法访问我的 Exchange 服务器:

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

exchange_account = Account(
    primary_smtp_address='someone@somewhere.com',
    credentials=credentials,
    autodiscover=True,
    access_type=DELEGATE)

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

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

我猜服务器以某种方式检测到该活动并阻止它认为它是欺诈性的。有人可以建议我需要让 Exchange 服务器管理员查找和更正的内容吗?它托管在 intermedia.net 上,如果有帮助的话。

非常感谢您的帮助。

【问题讨论】:

  • 虽然凭据仍然有效,但username 用户可能不再具有对someone@somewhere.com 帐户的委托访问权限。我最好的办法是与您的 Exchange 管理员验证这一点。
  • 谢谢。即使这是为该特定用户分配的帐户,这是否可能?我的意思是,这不是一个用户试图访问其他人的帐户。是用户试图访问他自己的帐户。或者我不应该使用 access_type=DELEGATE?
  • 这很奇怪。在这种情况下,DELEGATE 通常是正确的访问类型,但您始终可以尝试 IMPERSONATION。
  • 好吧,这很不幸。如果您在开头发布了引发错误的代码,那就太好了。无论如何,ErrorAccessDenied 通常在您请求您无权访问的项目或私有项目上的私有字段时由服务器提出。虽然听起来很奇怪,但您发送的文件夹可能以某种方式包含您无权访问的项目。您可以尝试通过在较短的日期范围内获取项目来缩小范围,直到遇到引发ErrorAccessDenied 的内容。如果您启用调试日志记录,请求和响应 XML 将告诉您确切的 ID。
  • 非常感谢!我认为这是问题的根源。有一些行为不端的项目。我一直在尝试,直到找到它们并能够将它们全部删除。现在我的整个已发送邮件框可以同步了。当另一个弹出来时,我会按照您的建议尝试隔离特定的违规元素。你帮了大忙。

标签: python exchangelib


【解决方案1】:

[将 cmets 提取为实际答案]

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

您可以通过仅从已发送项目中请求非私有字段来解决此问题,例如exchange_account.sent.all().only('subject', 'start', 'end')。否则,如果您能找到行为不端的项目并被允许将其删除,那就这样做吧。

【讨论】:

    猜你喜欢
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2017-08-29
    • 2013-05-27
    • 1970-01-01
    相关资源
    最近更新 更多