C# 如何捕获Exchange Web服务器上已删除的项目

C# 如何捕获Exchange Web服务器上已删除的项目,c#,exchangewebservices,exchange-server-2010,ews-managed-api,C#,Exchangewebservices,Exchange Server 2010,Ews Managed Api,在Exchange服务器上创建或修改元素时,我会收到一个具有唯一id的StreamingNotification以及有关该联系人/日历的其他信息,但我如何才能获得有关已删除项目的信息 我从哪里得到身份证?或者至少是第一个电子邮件地址或主题 我正在使用EWS托管API,下面是我的代码: 流化订阅= ser.SubscribeToStreamingNotifications 新文件夹ID[]{WellKnownFolderName.Contacts, WellKnownFolderName.Cale

在Exchange服务器上创建或修改元素时,我会收到一个具有唯一id的StreamingNotification以及有关该联系人/日历的其他信息,但我如何才能获得有关已删除项目的信息

我从哪里得到身份证?或者至少是第一个电子邮件地址或主题

我正在使用EWS托管API,下面是我的代码:

流化订阅= ser.SubscribeToStreamingNotifications 新文件夹ID[]{WellKnownFolderName.Contacts, WellKnownFolderName.Calendar}, EventType.Created, EventType.Modified, 事件类型。已删除 ; 您可以使用订阅操作或SyncFolderItems操作获取已删除的项目id。 参考资料:- 我是在iOS中开发的,但我认为您在c中使用的是EWSAPI 使我无法共享代码

在订阅操作中,可以指定事件类型DeletedEvent以获取通知。 在SyncFolderItems操作中,您将在“更改”下的“标记删除”中获得已删除的项

<Changes>
   <Create/>
   <Update/>
   <Delete/>
</Changes>

流式通知不会生成删除事件。在delete、delete或shift+delete两种情况下,项目实际上都会移动到其中一个“已删除项目”文件夹中。 常规删除会将项目移动到DeletedItems文件夹。 Exchange维护一个转储文件夹,您的所有shift+del项目都将发送到该文件夹。恢复它们是可能的,但要困难一点

您可以在以下文章中阅读有关Exchange删除机制的更多信息:

现在回来恢复已删除的邮件,需要注意两件重要的事情

您应该对试图为其恢复项目的人的邮箱具有模拟访问权限。委派访问不允许您在可恢复项目文件夹中搜索项目,您可以在其中找到已删除的项目

已删除项目的ItemId将更改。Exchange中的ItemId仅对文件夹唯一。当项目在文件夹之间移动时,其ItemId会更改。但是,在流事件属性OldItemId中可以找到旧的ItemId

下面的代码片段将让您获得已删除项的句柄

private void OnNotificationEvent(object sender, NotificationEventArgs args)
{
    foreach (var notification in args.Events.OfType<ItemEvent>())
    {
      if (notification.EventType == EventType.Moved)
      {
        ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "usersemail@domain.com");
        var item = Item.Bind(service, notification.ItemId);
      }
    }
}

您能负担得起使用SyncFolderItems吗?当然,我可以将代码更改为使用SyncFolderItems,我非常感谢您提供了此解决方案,但它并不能解决我的问题,因为我认为必须有另一个只使用StreamingNotifications的解决方案。或者微软真的忘记了吗?我知道Exchange2007不支持StreamingSubscription,你是对的,可能还有另一个解决方案,如果我得到了一些东西,我会与大家分享。我也有同样的想法。在我的Exchange2010 SP1上,我使用:shift+delete进行删除。删除的约会不会显示在文件夹deletedItems中。但我仍然收到通知=>moved。您尝试过EventType.moved吗?因为当您删除联系人时,它将移动到已删除的项目。现在我尝试使用移动事件,但还有一个小问题:当您选择一个或多个用户并按Shift+delete时,他们将被永久删除,因此,此解决方案不起作用。@Jageen事实上,这仅适用于exchange server 2013 | cf我想这是我应该接受的答案,但我不能尝试您的解决方案,因为我不再从事该行业。