如何访问来自其他组织的委派日历

How to access delegated calendars from other organization

我正在开发一个面向 Office 365 的应用程序,它需要访问可供登录用户使用的共享(委托)日历。 我根据 documentation 使用 EWS API - 明确指定日历所有者的 SMTP 电子邮件地址,如下所示:

<m:ParentFolderIds>
    <t:DistinguishedFolderId Id="calendar">
      <t:Mailbox>
        <t:EmailAddress>primary@contoso.com</t:EmailAddress>
      </t:Mailbox>
    </t:DistinguishedFolderId>
  </m:ParentFolderIds>

这非常适合与登录用户来自同一组织的用户共享的日历,但不适用于来自其他组织的日历。我总是收到相同的回复消息:

<m:MessageText>The SMTP address has no mailbox associated with it.</m:MessageText>
<m:ResponseCode>ErrorNonExistentMailbox</m:ResponseCode>

同时,我可以在 OWA UI - "Other calendars" 部分中看到此类日历(及其约会)。

这是 EWS API/Office 365 的限制,还是我遗漏了什么?

这是 EWS 的限制。当您使用 EWS 访问共享日历时,它实际上会转到服务器并打开所有者的邮箱。当 "sharer" 在您的组织之外时,它不能这样做。您看到的错误实际上是因为 EWS 尝试将所有者的电子邮件地址解析为组织内部的邮箱但失败了。

在组织外部共享是通过发布方法完成的,因此您的 Outlook 或 OWA 客户端永远不必直接访问所有者的邮箱。 EWS 不知道如何访问此信息。

从共享消息来看,您似乎可以将其作为 ICS 提要访问,但您需要以某种方式获取该提要的 URL。它在所有者共享日历时发送给用户的初始消息中。