• [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

  • 相关阅读:
    Don‘t Cry for Me, Argentina
    对象池
    拒绝高姿态
    SOS: How to popup a HwndSource on topmost
    关于设计和设计文档的2个补充
    从今天开始写博客
    Kafka+Storm写入Hbase和HDFS
    工作流调度引擎Oozie
    showModalDialog在父窗体和子窗体之间传值
    慢说HttpContext
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/7561326.html
Copyright © 2020-2023  润新知