如何在Exchange Web Server上捕获已删除的项目
本文关键字:删除 项目 Exchange Web Server | 更新日期: 2023-09-27 18:22:24
当在Exchange Server上创建或修改元素时,我会收到一个带有唯一id的StreamingNotification和有关该联系人/日历的其他信息,但我如何才能获得有关已删除项目的信息?
我从哪里得到身份证?或者至少是第一个电子邮件地址或主题?
我正在使用EWS托管API,下面是我的代码:
StreamingSubscription subscription =
ser.SubscribeToStreamingNotifications(
new FolderId[] { WellKnownFolderName.Contacts,
WellKnownFolderName.Calendar },
EventType.Created,
EventType.Modified,
EventType.Deleted
);
流式通知不会生成"删除"事件。在删除、删除或shift+delete这两种情况下,项目实际上都被"移动"到其中一个已删除的项目文件夹中。定期删除会将您的项目移动到"DeletedItems"文件夹。Exchange维护了一个垃圾箱文件夹,所有"shift+del"项目都会被发送到该文件夹。恢复它们是可能的,但有点困难。
您可以在以下文章中阅读更多关于Exchange的删除机制:
- http://msdn.microsoft.com/en-us/library/office/dn424760(v=不包括150).aspx
- http://technet.microsoft.com/en-us/library/ee364755(v=不包括150).aspx
现在回来恢复已删除的项目,需要注意的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);
}
}
}
您可以使用订阅操作或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#这样我就不能共享代码了
在Subscription操作中,您可以指定事件类型"DeletedEvent"来获取通知
在SyncFolderItems操作中,您将在"Changes"下的标签"Delete"中获得已删除的项目
<Changes>
<Create/>
<Update/>
<Delete/>
</Changes>