[英]Accessing email properties in Exchange web server managed API
[英]Detect email move using Exchange Web Service Managed API?
我正在使用EWS托管API和C#。
我想知道是否有可能檢測到電子郵件何時被移動到另一個文件夾。
這是我到目前為止:
static void SetPullNotifications(ExchangeService service)
{
PullSubscription subscription = service.SubscribeToPullNotificationsOnAllFolders(
5, null,
EventType.Moved, EventType.Deleted, EventType.Copied, EventType.Modified);
GetEventsResults events = subscription.GetEvents();
foreach (ItemEvent itemEvent in events)
{
switch (itemEvent.EventType)
{
case EventType.Moved:
MessageBox.Show("Item Moved :" + itemEvent.ItemId.UniqueId);
break;
case EventType.Deleted:
MessageBox.Show("Item deleted: " + itemEvent.ItemId.UniqueId);
break;
case EventType.Copied:
MessageBox.Show("Item Copied :" + itemEvent.ItemId.UniqueId);
break;
case EventType.Modified:
MessageBox.Show("Item Modified :" + itemEvent.ItemId.UniqueId);
break;
}
}
}
如果我在方法GetEvents()
上放置斷點,然后移動電子郵件,這可以正常工作。 但沒有斷點它就不起作用。 events
包含任何結果。
有任何想法嗎 ?
你正確的方式,但你錯過了什么。 您的代碼只會獲取創建訂閱和獲取事件之間發生的事件,這就是它只適用於斷點的原因。
為了使你的代碼工作,你應該做兩件事。 首先:在啟動應用程序時創建子程序並繼續參考它。 在Second Store中,您從Subscription獲得的Watermark會在應用程序啟動時重新加載。 也許是這樣的:
static PullSubscription s_Subscription;
static void Main()
{
ExchangeService service = CreateService();
CreateSubsciption(service);
//DoSomething;
GetEvents();
//DoSomething;
StoreWatermark(s_Subscription.Watermark);
}
static void CreateSubscription(ExchangeService Service)
{
string watermarkt = LoadWatermark();
s_Subscription = service.SubscribeToPullNotificationsOnAllFolders(
5, watermark,
EventType.Moved, EventType.Deleted, EventType.Copied, EventType.Modified);
}
static void GetEvents()
{
GetEventsResults events = subscription.GetEvents();
foreach (ItemEvent itemEvent in events)
{
switch (itemEvent.EventType)
{
case EventType.Moved:
MessageBox.Show("Item Moved :" + itemEvent.ItemId.UniqueId);
break;
case EventType.Deleted:
MessageBox.Show("Item deleted: " + itemEvent.ItemId.UniqueId);
break;
case EventType.Copied:
MessageBox.Show("Item Copied :" + itemEvent.ItemId.UniqueId);
break;
case EventType.Modified:
MessageBox.Show("Item Modified :" + itemEvent.ItemId.UniqueId);
break;
}
}
}
您可以將流式通知與EWS一起使用來偵聽Exchange Server上項目的更改。 以下是如何設置流式通知的示例:
在您的情況下,您應該處理EventType.Moved
事件。 當您處理事件時,您將獲得一個ItemEvent
類型的對象(如上例所示),該對象具有兩個屬性OldParentFolderId
和ParentFolderId
,用於標識項目從中移動到的文件夾。
你的代碼無法工作的原因很簡單。 事件沒有時間發生。 您創建一個只會識別您創建它的Moment事件的子目錄,因為水印為空。 之后只有一行,所以讓我們說一個毫秒之后你會問這個訂閱“嘿,過去幾毫秒有沒有活動?” 答案是“不”。 在程序啟動時創建訂閱並在計時器上調用getevents,可能是5分鍾后。 如果您在過去五分鍾內有任何活動,則會顯示您的消息框。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.