博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EWS 通过SubscribeToPullNotifications订阅Exchange新邮件提醒
阅读量:5887 次
发布时间:2019-06-19

本文共 3838 字,大约阅读时间需要 12 分钟。

摘要

在ews中提供了一种拉通知的方式获取服务端邮件的操作,通过这种方式客户端可以订阅该通知,在邮箱有变化的时候,可以收到通知。

工作方式

EWS 通知是在订阅的基础上处理的。通常是一个订阅每个邮箱,以及邮箱订阅中您可以订阅部分或全部文件夹。您决定何种通知订阅 (流、 请求或推) 以及哪种类型的事件您想要接收 (NewMail,创建、 删除、 修改日期,等等),然后创建订阅。EWS 事件然后发送以异步方式从邮箱服务器到客户端。

EWS 流式处理通知

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

EWS 拉通知

拉通知依赖于在客户端上的时间间隔,客户端管理通知的请求。这可能会导致任何的通知与 GetEvents 响应。图 3 显示了请求订阅和请求通知的工作方式。

一个例子

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Microsoft.Exchange.WebServices;using Microsoft.Exchange.WebServices.Data;using System.Net;using System.Timers;namespace Wolfy.Calendar_Email{    class Program    {        static ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);        static PullSubscription Subscription;        static void Main(string[] args)        {            SubscribePullNotifications(WellKnownFolderName.Inbox);            Timer mytimer = new Timer();            mytimer.Elapsed += mytimer_Elapsed;            mytimer.Interval = 10000;            mytimer.Start();            Console.Read();        }        static void mytimer_Elapsed(object sender, ElapsedEventArgs e)        {            Console.WriteLine("running");            GetPullNotifications();        }        public static void SubscribePullNotifications(FolderId folderId)        {            service.Url = new Uri("https://mail.testsssss.com/ews/exchange.asmx");            service.Credentials = new NetworkCredential("www", "12345", "domain");            Subscription = service.SubscribeToPullNotifications(new FolderId[] { folderId }, 1440, null, EventType.NewMail, EventType.Created, EventType.Deleted);        }        public static void GetPullNotifications()        {            IEnumerable
itemEvents = Subscription.GetEvents().ItemEvents; foreach (ItemEvent itemEvent in itemEvents) { switch (itemEvent.EventType) { case EventType.Copied: Console.WriteLine("Copied"); break; case EventType.Created: Console.WriteLine("Created"); break; case EventType.Deleted: Console.WriteLine("Deleted"); break; case EventType.FreeBusyChanged: Console.WriteLine("FreeBusyChanged"); break; case EventType.Modified: Console.WriteLine("Modified"); break; case EventType.Moved: Console.WriteLine("Moved"); break; case EventType.NewMail: Console.WriteLine("New mail"); Console.WriteLine(itemEvent.ItemId.UniqueId); EmailMessage emailMessage = EmailMessage.Bind(service, itemEvent.ItemId.UniqueId); Console.WriteLine(emailMessage.Subject); Console.WriteLine(emailMessage.Body.Text); Console.WriteLine(emailMessage.From); Console.WriteLine(emailMessage.DateTimeReceived); Console.WriteLine(string.Join(";", emailMessage.ToRecipients.Select(x => x.Address).ToArray())); break; case EventType.Status: Console.WriteLine("Status"); break; default: break; } } } }}

开始监听

当收到新的邮件时,eventType为NewMail,可以根据uniqueid查询当前邮件详情。

参考资料

转载于:https://www.cnblogs.com/wolf-sun/p/6483415.html

你可能感兴趣的文章
参观迅达云成公司有感
查看>>
mount挂载NTFS失败
查看>>
CentOS6.5安装MariaDB10.0.15编译安装和多实例管理配置
查看>>
lua 自定义lib
查看>>
U盘安装centos6.5
查看>>
protobuf消息的自动派发
查看>>
openssl
查看>>
Mybatis多个参数映射
查看>>
ubuntu不能登陆死循环问题解决
查看>>
exchange 2016 安装开源垃圾邮件网关
查看>>
javascript鼠标事件【部分】
查看>>
SSH 通过密钥登录
查看>>
今天只是一个开始
查看>>
Mycat读写分离以及拆库拆表综合实验2:部署配置mycat读写分离与拆库拆表
查看>>
程序至上
查看>>
我的友情链接
查看>>
新书上市:《ANSYS 14.0超级学习手册》
查看>>
$(window).load(function() {})和$(document).ready(function(){})的区别
查看>>
LVS-DR模型实现负载均衡
查看>>
Oracle_052_lesson_p8
查看>>