0

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

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


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

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

2 回答 2

6

流式通知不会生成“删除”事件。在删除、删除或 shift+delete 的两种情况下,项目实际上是“移动”到已删除项目文件夹之一。定期删除会将您的项目移动到“DeletedItems”文件夹。Exchange 维护一个垃圾箱文件夹,您的所有“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

现在回来恢复已删除的项目,需要注意的 2 个重要事项

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

  2. 已删除项目的 ItemId 将更改。Exchange 中的 ItemId 仅对文件夹唯一。当一个项目在文件夹之间移动时,它的 ItemId 会发生变化。但是,旧的 ItemId 在 Streaming events 属性 OldItemId 中找到

下面的代码片段将让您处理已删除的项目。

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);
      }
    }
}
于 2014-04-25T20:46:15.593 回答
2

您可以使用订阅操作或 SyncFolderItems 操作来获取已删除的项目 ID。
参考:-
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>
于 2013-07-16T08:49:48.323 回答