EWS Managed API 介绍
来源:互联网 发布:js怎么为radio赋值 编辑:程序博客网 时间:2024/06/07 05:44
一、什么是EWS Managed API
要介绍什么是EWS Managed API首先要介绍什么是EWS,EWS的全称是Exchange Web Services,是Exchange 2007 之后推出的,它提供了一套访问Exchange资源的全新接口。EWS完成了一下几个目的:
- 提供Exchange资源的统一访问;
- 内置了与Outlook一致逻辑层;
- 给予web Service标准;
- 可远程访问。
EWS集成了原来WebDAV和CODEX的功能,它提供的相关功能使实现日程安排等操作非常容易,EWS是基于SOAP协议的XML Web Service,这使它可以被发送HTTPS请求的任何操作系统远程访问。
EWS是非常高效的Exchange资源访问接口,如果我们采用引用Web Service服务的方法来生产代理类访问EWS,这个可能是一个不好的方法,因为代理类是协议的直接映射,并且自动生成的代码使用起来非常不方便,实现一个简单的功能就要写一大堆代码,这些自动生产的代理类,难以使用和维护。
为了解决这些使用和维护的问题,微软在2009年10左右推出了Microsoft Exchange Web Services(EWS) Managed API。它是一个完全面向对象的API,就和.Net Framework类库一样,它基于WES XML协议,提供了非常容易学习、使用和维护的EWS.Net开发接口。
二、使用的前准备
- 首先要从微软官方网站上去下载EwsManagedApi.msi的一个安装包。下载完成后安装,安装成功后我们从安装目录中Copy我们所需要的Microsoft.Exchange.WebServices.dll和 Microsoft.Exchange.WebServices.xml 两个文件。然后在你的项目中添加引用那个DLL文件。
三、EWS Managed API 功能介绍
- 绑定WES
在开始使用EWS Managed API之前,首先要初始化一个ExchangeService类的一个实例,代码如下:
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1;
// 指定用户名,密码,和域名
service.Credentials = new WebCredentials("username", "password", "domain");
// 指定Exchage服务的url地址
service.Url = new Url("your Exchange Service url Address");
我们在实例化ExchangeService时一般要指定Exchange的版本,如不指定将会有异常抛出。如果我们知道Exchange Service的地址直接给实例指定URL,如果不知道可以用EWS Managed API的Autodiscover服务,代码如下:
service.AutodiscoverUrl("your e-mail address");
Autodiscover服务是EWS的一个核心部分,只要提供了Email地址,程序就会自动获取与服务器通讯的设置方式。
2. Item和Folder的介绍
在EWS Managed API中定义了Item和Folder的一个类的继承关系,每一个类就对应一个Exchange中的给定的类型,例如:EmailMessage 类就代表邮件消息,Appointment类则代表会议和日历中的事件。如下图片显示:
1) Item类的继承关系:
2) Folder类的继承关系:
每一个Item和Folder都一个唯一的标示(uniquely identified.),Item和Folder都有一个Id的属性对应这个唯一的标示,Item的Id类型是ItemId,folder的Id类型是FolderId。
如果知道这个唯一的标示,我们可以用Item和Folder类的静态方法Bind来获取对应的Item和Folder对象,示例代码如下:
EmailMessage message = EmailMessage.Bind(service, new ItemId(uniqueId));
//通过uniqueId来获取已存在的Folder信息
Folder folder = Folder.Bind(service, new FolderId(uniqueId));
如果我们不知道这个item的类型,可以用以下的方法获取:
//通过uniqueId来获取已存在的Item类型消息
Item item = Item.Bind(service, new ItemId(uniqueId));
if (item is EmailMessage)
{
}
else if (item is Appointment)
{
}
else
{
// Handle other types.
}
获取folder类型信息和上面的方法同理。
3. 发送邮件
发送邮件的代码有详细的注释说明,如下:
// 邮件主题
message.Subject = "Hello kevindiao!";
message.Body=new MessageBody();
// 指定发送邮件的格式,可以是Text和Html格式
message.Body.BodyType=BodyType.Text;
// 邮件内容
message.Body.Text = "Sent using the EWS Managed API.";
// 可以添加多个邮件人.也可以添加一个集合,用
// message.ToRecipients.AddRange(IList toEmailAddress_list)
message.ToRecipients.Add("test@klx168.com");
// 保存草稿
//message.save();
// 只发送不保存邮件
// message.Send();
// 发送并保存已发送邮件
message.SendAndSaveCopy();
发送有附件的代码如下:
message.Attachmens.addFileAttachment(“@d:\test.txt”);
4.回复和转发邮件
回复邮件代码如下:
{
// 回复所有
// replyToMessage.Reply(replyMsg,true);
// 回复指定的账号
ResponseMessage responseMessage =
messageToReplyTo.CreateReply(true);
responseMessage.BodyPrefix = replyMsg;
// 选择需要回复的账号
responseMessage.CcRecipients.Add("someone@klx168.com");
responseMessage.SendAndSaveCopy();
}
转发邮件和回复类型只要调用.Forward()或.CreateForward()方法。
5. 删除一个任何类型的Item
删除一个Item,如邮件,代码如下:
// 软删除指将邮件移动到已删除文件箱中,如果是在已删除文件夹中的item则直接删除,
//回收资源。
message.Delete(DeleteMode.SoftDelete);
删除Item和删除Folder类似。
6. 创建一个周期性的约会
创建周期性约会和周期性会议是类似的,这里就举例约会,代码如下:
Appointment appointment = new Appointment(service);
//约会主题
appointment.Subject = "Play Basketball";
//约会内容
appointment.Body = "Play Basketball";
//约会开始时间2010-6-1 12:30:00
appointment.Start = new DateTime(2010, 5, 29, 12, 30, 0);
//约会结束
appointment.End = appointment.Start.AddHours(4);
//约会的位置
appointment.location="体育馆";
//添加与会者
appointment.RequiredAttendees.Add(“test@klx168.com”)
// 从2010-6-1 12:30:00开始每周举行一次
appointment.Recurrence = new Recurrence.WeeklyPattern(
appointment.Start,
1,/*每一周一次*/
DayOfWeek.Saturday
);
//可以设置发送通知的方式,如:
//Appointment.Save(SendInvitationsMode.SendOnlyToAll)
appointment.Save()
7.创建一个自定义文件夹
在指定的目录下创建文件夹,代码如下:
folder.DisplayName = "New Folder";
// 在收件箱中创建自定义文件夹.
folder.Save(WellKnownFolderName.Inbox);
8. 获取收件箱中的内容
获取收件箱中所有的内容,代码如下:
// 也可以指定每次获取的条数,如:10条New ItemView(10)
FindItemsResults<Item> findResults = service.FindItems(
WellKnownFolderName.Inbox,
new ItemView(int,MaxValue));
foreach (Item item in findResults.Items)
{
// 对item做一些处理.
}
获取收件箱中的内容的方式和获取其他文件夹中的内容类似,只要指定
WellKnownFolderName的枚举类型。分页获取需要ItemView.Offset属性的支持。
9.获取一个文件夹下所有子文件夹
代码如下:
WellKnownFolderName.Inbox,
new FolderView(int.MaxValue));
foreach (Folder folder in findResults.Folders)
{
// 对Folder的一些处理.
}
代码是获取收件箱中所有的子文件夹,要获取其他文件夹下的子文件夹类似。
10. 创建任务
创建或更新一个任务,代码如下:
删除和获取一个任务和获取一条Item类型。获取一个时间段内的任务和获取一个时间段内的约会类型。在任务中也可以添加附件和在邮件中添加附件相同。
11. 分页获取item
代码如下:
/// 分页获取指定文件夹中的内容
/// </summary>
/// <param name="folderType">需要获取内容的文件夹</param>
/// <param name="pageSize">显示条数</param>
/// <param name="currentPage">当前页</param>
/// <param name="totalItems">总共多少条</param>
/// <returns></returns>
public FindItemsResults<Item> GetItemsOfPager(WellKnownFolderName folderType,
int pageSize, int currentPage, out int totalItems)
{
ItemView itemView = new ItemView(pageSize);
itemView.Offset += pageSize * currentPage;
FindItemsResults<Item> findResults;
try
{
findResults = MyExchangeService.FindItems(folderType,
itemView);
}
catch (Exception ex)
{
throw new Exception("异常" + ex.Message);
}
totalItems = findResults.TotalCount;
return findResults;
}
12. 创建一个条件搜索
可以指定多个文件箱和多个关键字来创建一个搜索,查看如下代码:
/// 在搜索文件夹中创建一个自定义的搜索
/// </summary>
/// <param name="displayName">显示的名称</param>
/// <param name="searchFolderName">检索目录</param>
/// <param name="filders">检索条件</param>
public void CreateSearchFolder(string displayName,WellKnownFolderName searchFolderName,
params SearchFilter[] filders)
{
SearchFolder searchFoler = new SearchFolder(MyExchangeService);
searchFoler.DisplayName = displayName;
// 添加查询的文件夹
searchFoler.SearchParameters.RootFolderIds.Add(searchFolderName);
//添加查询条件
searchFoler.SearchParameters.SearchFilter = new SearchFilter.SearchFilterCollection(
LogicalOperator.Or,filders);
//保存文件夹的位置
searchFoler.Save(WellKnownFolderName.SearchFolders);
}
可以根据上面的方法指定的条件来创建各种条件的搜索。
13. 其他功能
在ExchangeService中还有下面一些功能,文档中暂时没有详细的描述:
1) 设置其他邮箱地址,查收其他邮箱的邮件 。
2) 一次请求创建多个类型的Item。
3) 获取可用性服务。
4) 用pull的方式获取提醒。
四。 备注
- EWS Managed API 下载地址:
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=c3342fb3-fbcc-4127-becf-872c746840e1。
- 参考网站
Exchange Web Services Managed API 1.0 入门
Exchange Development Forum
Exchange Web Service Namespace
原文地址:http://www.cnblogs.com/PPlive/articles/ExchangeWebservice.html
- EWS Managed API 介绍
- EWS Managed API 介绍
- EWS Managed API 介绍
- ews
- Exchange Web Service (EWS) API 使用笔记
- Exchange Web Service (EWS) API 使用笔记
- Windows Mobile 6.5 Gesture API 介绍 --- (3) 使用Managed Gesture API
- Java -- 通过EWS JAVA API读取exchange邮件
- Java -- 通过EWS JAVA API读取exchange邮件
- ews model
- Managed Directx9 Kick Start,第一章 介绍Directx3D
- C#编程使用Managed Wifi API连接无线SSID
- C# 通过SSID连接指定的WIFI 【Managed Wifi API】
- C#使用Managed Wifi API连接带密码的SSID .
- C#编程使用Managed Wifi API连接无线SSID
- C#编程使用Managed Wifi API连接无线SSID & C#编程使用Managed Wifi API连接无线SSID
- EWS Mail Operations (一)
- EWS Mail Operations (二)
- 不接sdk分享到微信,微博等第三方
- Linux中的HZ tick jiffies
- ios Socket使用大全
- OCP-1Z0-053-V13.02-141题
- 简单说说PHP优化那些事
- EWS Managed API 介绍
- windows7配置svn服务器
- linux下提示bash:command not found
- 黑马程序员_java编程基础第3天函数 数组
- CONNECT BY 的应用
- ftp配置
- java操作数据库
- 一个好域名在SEO优化中的作用
- Django 自定义admin 开源项目