在通过EWS Exchange Server的“StreamingSubscription”获取通知时获取新收到的电子邮件的ItemId。

时间:2016-11-22 13:11:13

标签: c# email outlook notifications exchangewebservices

我正在创建一个工具(Windows应用程序)来接收邮件通知,一旦收到收到新邮件的通知,我就可以选择阅读此邮件或忽略它。

我能够获得流通知,但它只是说现在收到了一封新邮件我的要求是显示一条消息,说明已收到“X人(发件人)”的新邮件,并且使用可以选择他/她想读或忽略它。

现在收到通知后我点击了电子邮件服务器并获取了所有未读邮件,然后从该列表中获取了最后一封未读邮件,但这是不正确的方法,假设同时收到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”收到通知已收到新邮件时,如何获得新收到的电子邮件的ItemId。

1 个答案:

答案 0 :(得分: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/