[EWS]如何: 通过使用 Exchange 中的 EWS 流有关邮箱事件的通知

摘要

在之前的文章中,介绍ews拉通知的模式订阅邮件。详情可阅读这篇文章:EWS 通过SubscribeToPullNotifications订阅Exchange新邮件提醒 ,可以看到拉通知的模式,是一次订阅,然后定时器不停的请求服务器。

流通知

流式处理通知依赖悬挂 get 请求在服务器上保留流订阅连接以便连接处于活动状态时所发生的任何事件传送到客户端立即打开。过程中的一个连接,并连接保持打开直到间隔过期,或最多 30 分钟可以发送多个通知。连接到期后,客户端发送悬挂再次 get 请求。图 2 显示了流订阅和流式处理通知的工作方式。

c#代码

// Subscribe to streaming notifications in the Inbox. 
StreamingSubscription = service.SubscribeToStreamingNotifications(
    new FolderId[] { WellKnownFolderName.Inbox },
    EventType.NewMail,
    EventType.Created,
    EventType.Deleted,
    EventType.Modified,
    EventType.Moved,
    EventType.Copied,
    EventType.FreeBusyChanged);

// Create a streaming connection to the service object, over which events are returned to the client.
// Keep the streaming connection open for 30 minutes.
StreamingSubscriptionConnection connection = new StreamingSubscriptionConnection(service, 30);
connection.AddSubscription(StreamingSubscription);
connection.OnNotificationEvent += OnNotificationEvent;
connection.OnDisconnect += OnDisconnect;
connection.Open();

可以通过上面代码看到,可以流通知方式,可以保持长连接,监听30分钟内收件箱邮件的事件,如果超时,可以出发断开连接的事件。这时我们可以再次创建连接。

获取邮件内容

        private void OnNotificationEvent(object sender, NotificationEventArgs args)
        {
            if (args != null)
            {
                foreach (NotificationEvent notificationEvent in args.Events)
                {
                    if (notificationEvent is ItemEvent)
                    {
                        ItemEvent itemEvent = (ItemEvent)notificationEvent;
                        Console.WriteLine(notificationEvent.EventType.ToString());
                        Item item = Item.Bind(this._service, itemEvent.ItemId);
                        switch (notificationEvent.EventType)
                        {
                            case EventType.Moved:
                                Console.WriteLine(item.Subject);
                                break;
                            case EventType.NewMail:
                                Console.WriteLine(item.Subject);
                                break;
                            default:
                                break;
                        }
                    }

                }
            }
        }

参考文章

流通知

https://msdn.microsoft.com/zh-cn/library/office/dn458792(v=exchg.150).aspx

三种通知模式

https://msdn.microsoft.com/zh-cn/library/office/dn458791(v=exchg.150).aspx

原文地址:https://www.cnblogs.com/wolf-sun/p/7561326.html