如何在Exchange Web Server上捕获已删除的项目

时间:2013-07-16 07:20:25

标签: c# exchangewebservices exchange-server-2010 ews-managed-api

在Exchange Server上创建或修改元素时,我会获得具有唯一ID的StreamingNotification以及有关该联系人/日历的其他信息,但是如何获取有关已删除项目的信息?

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


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

StreamingSubscription subscription =
ser.SubscribeToStreamingNotifications(
    new FolderId[] { WellKnownFolderName.Contacts,
    WellKnownFolderName.Calendar },
    EventType.Created,
    EventType.Modified,
    EventType.Deleted
);

2 个答案:

答案 0 :(得分:6)

流式通知不会生成"删除"事件。在删除,删除或移位+删除的两种情况下,该项实际上是"已移动"到一个已删除的项目文件夹。 定期删除会将您的项目移动到" DeletedItems"夹。 Exchange维护一个dumpster文件夹,其中包含所有" shift + del"物品被发送到。有可能恢复它们,但有点困难。

您可以在这些文章中详细了解Exchange的删除机制:

  1. http://msdn.microsoft.com/en-us/library/office/dn424760(v=exchg.150).aspx
  2. http://technet.microsoft.com/en-us/library/ee364755(v=exchg.150).aspx
  3. 现在回来恢复已删除的项目,需要注意2个重要事项

    1. 您应该在您尝试恢复该项目的人的邮箱上拥有模拟访问权限。委托访问权限不允许您在RecoverableItems文件夹中搜索您将找到已删除项目的项目。

    2. 已删除项目的ItemId将更改。 Exchange中的ItemId仅对文件夹唯一。在项目文件夹之间移动项目时,其ItemId会更改。但是,旧的ItemId位于Streaming events属性OldItemId

    3. 以下代码段可让您了解已删除的项目。

      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);
            }
          }
      }
      

答案 1 :(得分:2)

您可以使用订阅操作或SyncFolderItems操作来获取已删除的商品ID。
referance: - http://msdn.microsoft.com/en-us/library/exchange/aa566188%28v=exchg.80%29.aspx
http://msdn.microsoft.com/en-us/library/exchange/aa563967%28v=exchg.80%29.aspx
我在iOS中开发这个,但我认为你在c#中使用EWSAPI 所以我不能分享代码。

在订阅操作中,您可以指定事件类型“DeletedEvent”以获取通知 在SyncFolderItems操作中,您将在“更改”

下的标签“删除”中获取已删除的项目
<Changes>
   <Create/>
   <Update/>
   <Delete/>
</Changes>