2016-11-22 1 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/

처럼이 사용하는 좋은 예제가 있습니다