EWS - 访问共享日历

EWS - Access Shared Calendars

我想列出每个交换共享日历的权限。 我有两个交换在线帐户: 维克拉姆辛格@gmail.com vikramsinghmrt@outlook.com

现在,我已经从 vikramsingh@gmail.com.

向 vikramsinghmrt@outlook.com 分享了一个日历

现在,当我使用 Exchange EWS API 获取日历列表时,我得到了所有日历(包括共享日历),但无法知道是哪一个共享日历。

我使用了以下代码:

PropertySet propSet = new PropertySet(BasePropertySet.FirstClassProperties, FolderSchema.Permissions); 文件夹 folder = Folder.Bind(service, folderid, propSet);

   if (folder.Permissions.Count != 0)
    {
        for (int t = 0; t < folder.Permissions.Count; t++)
        {
            if (folder.Permissions[t].UserId.DisplayName != null || folder.Permissions[t].UserId.PrimarySmtpAddress != null)
            {

            }
        }
    }

但是这个 return userId.DisplayName 和 UserId.PrimarySmtpAddress 每次都为 null。

我怎么知道哪个日历是共享的?

您可以使用属性 RequiredAttendeesOptionalAttendees 并检查共享日历的 E-Mail 地址。如果其中一个属性包含共享日历的邮件地址,则它来自共享日历。

如果您使用共享文件夹的关联遍历检查每个文件夹的文件夹关联项目集合,则该集合中应该有一个 IPM.Sharing.SyncState 类型的项目。

        ItemView iv = new ItemView(1000);
        iv.Traversal = ItemTraversal.Associated;
        SearchFilter sf = new SearchFilter.IsEqualTo(ItemSchema.ItemClass, "IPM.Sharing.SyncState");
        FindItemsResults<Item> fiItems = Folder.FindItems(sf, iv);

我得到了答案。我们有如下日历调用。 service.FindFolders(new FolderId(WellKnownFolderName.Root, "email")

在这次通话中,我们传递了我的电子邮件 ID。 (我的凭据电子邮件)。 如果我需要访问其他用户日历(共享日历)。我需要在这里传递其他用户的电子邮件地址。像 service.FindFolders(new FolderId(WellKnownFolderName.Root, "Other user email").

服务对象是由我的凭据创建的,只是传递其他用户的电子邮件。现在您可以获得所有日历。