zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    dnn5.5.1的配置
    The Auto option has been disabled as the DotNetNuke Application cannot connect to a valid SQL Server database
    DNN常用的几种页面跳转(EditUrl和Globals.NavigateURL)
    动态生成ASP.NET按钮时要注意的一个问题
    Visual C#实现Windows信使服务
    浏览器滚动条的参数总结
    AJAX实现无刷新三联动下拉框
    c#.net常用的小函数和方法集
    利用OWC生成统计图表(代码+注释)
    ASP.NET之精通弹出窗口
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/7561326.html
Copyright © 2011-2022 走看看