2016-11-22 9 views
0

メールの通知を受け取るツール(Windowsアプリケーション)を作成しています。新しいメールが届いたという通知を受け取ったら、このメールを読んだり無視したりすることができます。EWS Exchange Serverの "StreamingSubscription"で通知を受け取っている間に、新しく受信した電子メールのItemIdを取得します。

私はストリーム通知を受け取ることができますが、新しいメールが受信されたことを通知するだけです。私の要件は、「X Person(送信者)」から新しいメールが受信されたというメッセージを表示し、 /彼女はそれを読んだり無視したりしたい。

今すぐ通知を受けた後、私は電子メールサーバにヒットし、未読メールをすべて取得してから、そのリストから最後に未読メールをフェッチしますが、それは正しいアプローチではありません。2-3メールが同時に受信されたら、どのメールをフェッチする必要があります。以下は

私はストリーム通知のため

void SetStreamingNotifications(ExchangeService service) 
     {    
      StreamingSubscription streamingsubscription = service.SubscribeToStreamingNotifications(
       new FolderId[] { WellKnownFolderName.Inbox }, 
       EventType.NewMail, 
       EventType.Created, 
       EventType.Deleted); 

      StreamingSubscriptionConnection connection = new StreamingSubscriptionConnection(service, 1); 

      connection.AddSubscription(streamingsubscription); 
      // Delegate event handlers. 
      connection.OnNotificationEvent += 
       new StreamingSubscriptionConnection.NotificationEventDelegate(OnEvent); 
      connection.OnSubscriptionError += 
       new StreamingSubscriptionConnection.SubscriptionErrorDelegate(OnError); 
      connection.OnDisconnect += 
       new StreamingSubscriptionConnection.SubscriptionErrorDelegate(OnDisconnect); 
      connection.Open();   
     } 

を使用していたコードが今私の質問はどのように私は、すぐに私は新しいことを「StreamingSubscription」を通じて通知を受け取るよう、新たに受信した電子メールのアイテムIDを得ることができるということですメールが受信されました。

答えて

1

アイテムIDは、例えば(SOAP通知の一部として提供されます)のItemEventクラスで返され

 switch (notification.EventType) 
    { 
     case EventType.NewMail: 
      Console.WriteLine("\n————-Mail created:————-"); 
      break; 
     case EventType.Created: 
      Console.WriteLine("\n————-Item or folder created:————-"); 
      break; 
     case EventType.Deleted: 
      Console.WriteLine("\n————-Item or folder deleted:————-"); 
      break; 
    } 
    // Display the notification identifier. 
    if (notification is ItemEvent) 
    { 
     // The NotificationEvent for an e-mail message is an ItemEvent. 
     ItemEvent itemEvent = (ItemEvent)notification; 
     Console.WriteLine("\nItemId: " + itemEvent.ItemId.UniqueId); 
    } 

https://ewsstreaming.codeplex.com/

のようにこれを使用する良いサンプルがいくつかあります
関連する問題