2016-11-22 5 views
0

Я создаю инструмент (приложение Windows) для получения уведомления о почте, и как только я получаю уведомление о получении новой почты, я могу выбрать, читать это письмо или игнорировать его.Получите ItemId только что полученного электронного письма, получая уведомление через «StreamingSubscription» сервера Exchange EWS.

Я могу получить уведомление о потоке, но он только говорит, что теперь получено новое письмо, поэтому мое требование состоит в том, что отображается сообщение о том, что новое сообщение получено от «X Person (sender)», и использование может выбрать, что он/она хочет прочитать или проигнорировать это.

Сразу после получения уведомления я попал на сервер электронной почты и получаю все непрочитанные письма, а затем получаю последнюю непрочитанную почту из этого списка, но это неправильный подход. Предположим, что 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();   
     } 

Теперь мой вопрос заключается в том, что, как я могу получить ItemId вновь полученного по электронной почте, как только я получаю уведомление через «StreamingSubscription», что новый mail получен.

ответ

1

ItemId возвращается в класс ItemEvent (который поставляется как часть уведомления SOAP), например

 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/