最近公司需要在内部门户上显示从exchange上获取的邮件列表,一些相关文章上只是粗略的说需要引用exchange webservice来辅助做二次开发,可是怎么找都找不到EWS的引用,无奈之中看到一热心网友的这篇文章,得意解决问题。
有时候我们需要使用程序来进行收发邮件, 传统的POP3/SMTP/IMAP等协议也正广泛的被使用着,有关这些协议的收发邮件代码网上一抓一大把~ 如果要用这些协议可以去别处看看.
我这里要谈的是使用Microsoft Exchange Sever来进行邮件的收发.
通过网上查找资料我找到了微软官方的Exchange Server Developer Center , 从中得知了可以使用Microsoft Exchange Web Services Managed API来进行Exchange Server的交互. 你可以在这里 下载到当前的最新1.1版本.
下载时有两个文件,根据你的实际情况选择即可:
Instructions For x64 (64-bit) computers, download and run EwsManagedApi.msi For x86 (32-bit) computers, download and run EwsManagedApi32.msi
安装之后的安装目录如图:
要使用EWS, 你需要将Microsoft.Exchange.WebServices.dll引用到你的项目之中.
一些基本的使用可以阅读GettingStarted.doc文件,里面说的比较清楚.
英文不好的同学可以查看这些篇文章
EWS Managed API 介绍(上)
EWS Managed API 介绍(下)
来自博客园的这两篇文章基本是对于官方GettingStarted.doc文件的翻译.
但是在我的应用中, 我需要读取所有在Inbox(收件箱)里的新邮件, 而已读邮件将被我忽略掉, 在读到新邮件后经过处理再将其标记为已读. 在示例代码中给出的读取Inbox中的邮件功能显然不能满足我的要求.
经过调研,写出如下代码已实现目标
02
ExchangeService service =
new
ExchangeService(ExchangeVersion.Exchange2007_SP1);
04
service.Credentials =
new
WebCredentials(Info.UserName, Info.Password, Info.Domain);
06
service.Url =
new
Uri(Info.SeverUrl);
08
service.AutodiscoverUrl(Info.Email);
10
SearchFilter sf =
new
SearchFilter.IsEqualTo(EmailMessageSchema.IsRead,
false
);
12
FindItemsResults<ITEM> findResults = service.FindItems(
13
WellKnownFolderName.Inbox,
17
foreach
(Item item
in
findResults.Items)
19
EmailMessage email = EmailMessage.Bind(service, item.Id);
22
Console.WriteLine(email.Body);
26
email.Update(ConflictResolutionMode.AlwaysOverwrite);