EWS 通过SubscribeToPullNotifications订阅Exchange新邮件提醒
摘要
在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<ItemEvent> 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://msdn.microsoft.com/zh-cn/library/office/dn458791(v=exchg.150).aspx
https://msdn.microsoft.com/en-us/library/office/dn458790(v=exchg.150).aspx
https://code.msdn.microsoft.com/exchange/exchange-2013-set-pull-14c8360b
转载于:https://www.cnblogs.com/wolf-sun/p/6483415.html
EWS 通过SubscribeToPullNotifications订阅Exchange新邮件提醒相关推荐
- qq和微信收不到新邮件提醒
以前没在意,最近笔试面试的都收不到邮件,hr打电话才看到. 原因是之前下载了qq邮箱app. 解决方法:安卓有效:打开QQ邮箱,设置–新邮件提醒–点你的账号,关掉"仅在QQ邮箱客户端提醒&q ...
- Outlook中自定义新邮件提醒
由于我平时工作的时候总是在远程桌面或者虚机里边,所以经常有新邮件或者Reminder没有能及时察觉,所以便写了这么一个VBA,在有新邮件或者reminder的时候使用主板小喇叭来点动静.关于Outlo ...
- java 拉取收件箱邮件源码_邮件提醒系统:新邮件识别
最近在做邮件提醒抄送企业微信消息系统,就目前而言,无论是pop3还是imap都没有一个好的方法只接收新邮件,基本只能依靠收件箱列表message自行判断,下面给出几种思路并作对比. //收件箱 fol ...
- python QQ空间新说说邮件提醒功能实现
先看一下qq邮件是怎么发送的!! 我们先做一个qq邮件发送的插件 #coding:utf-8 #导入所需要的工具包 import smtplib import time from email.mime ...
- ews java 新建邮箱_通过EWS JAVA API订阅邮箱更新
0. EWS JAVA API是什么? 用来访问 Exchange Web 服务的 Java 客户端,说白了就是一套访问Exchange邮件服务的Java API库,利用它我们可以编写Java代码来动 ...
- 域帐号密码快过期邮件提醒
社会的快速发展,企业的规模也随之变大,这样企业的人数自然也增多,由于人数的众多,为了便于管理所以用起了域环境,但是根据某些企业的性质,部分员工也可能不登陆域帐号,以至密码过期,这样,时间一长,域帐号的 ...
- Java实战-用Java mail实现Exchange发邮件给你喜欢的人
目录 1. 官方指导文章 2. 需要用到com.microsoft.ews-java-api 2.1 maven中添加 2.2 gradle中添加 3. 完整代码:新建一个MailUtil.java类 ...
- [京东价格监控网站]自定义商品监控/品类商品监控/降价邮件提醒
在京东购物时,你是否遇到如下情况: 心仪的商品降价了,你却一无所知,等发现了却只有四个大字"到货登记" 你设置了京东自带的降价提醒,结果京东在降价后很久才发邮件提醒你或者干脆没有提 ...
- Exchange 2007邮件服务器
Exchange 2007邮件服务器internet应用的搭建和部署 在前面的博文中我们已经介绍了在企业内部进行邮件服务器的部署,我们可以通过exchange2007来实现,这里我们要演示如何通过ex ...
最新文章
- SpringCloud Alibaba 微服务架构版本说明
- 4层板到12层板叠层经典设计方案
- php连接不到mysql怎么解决,怎么解决php无法连接mysql的问题
- JS 中如何判断 undefined 和 null
- CRM One Order Appointment里start Date的存储原理
- java 链表 实现
- dynamodb管理ttl_如何使用DynamoDB TTL和Lambda安排临时任务
- Java 中的并发工具类
- php sqlite id自增,Android sqlite设置主键自增长的方法教程
- Wikioi 2822爱在心中(强连通缩点+dfs)
- 多个select 多个列_程序员,你还在 Select * 吗?
- Atitit 为什么oracle这类大型数据库比mysql的性能机制目录1. 分区机制差别 11.1. Join算
- bootice工具修复linux,如何使用bootice工具修复引导
- 1.1.从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。
- WPF 计算DataGrid每一列的合计数
- xpage 传参_一个轻量级的Android路由框架,基于ARouter上进行改良,优化Fragment的使用,可结合XPage使用。...
- 我本沉默不显示服务器列表,独家发布辉煌沉默全新我本沉默2003服务端
- 【五、反向代理及其相关配置】
- DOS命令之COPY
- ✠OpenGL-8-阴影