前段时间和同事完成了一个Exchange 2010 OWA的改造版,他狠狠的把网易邮箱抄了一把,而我则狠狠的被EWS坑了一把。今天打开项目粗略看了一下,发现很多东西都有点记不起来了,思细极恐,决定还是梳理一下,免得以后措手不及。这里先上个照!

使用EWS进行多个文件夹邮件搜索

方法是使用一个FindfolderResult进行搜索,代码如下:

 FindFoldersResults findFoldersResults = service.FindFolders(rootFolderId, searchFilterCollection, folderView);
if (findFoldersResults.Folders.Count > )
{
Folder allItemsFolder = findFoldersResults.Folders[];
FindItemsResults<Item> findResults = allItemsFolder.FindItems(filter, BuildPagingView(pageInfo, orderProperty, sortDirection));
。。。

至于如何获取这个“所有文件夹”,参考以下代码:

var searchFilterCollection = new SearchFilter.SearchFilterCollection(LogicalOperator.And)
{
new SearchFilter.IsEqualTo(new ExtendedPropertyDefinition(, MapiPropertyType.Integer), ""),
new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "allitems")
};

“new SearchFilter.IsEqualTo(new ExtendedPropertyDefinition(13825, MapiPropertyType.Integer), "2")”是属性筛选,指定为邮件文件夹。关于这个,我只想说“你妹”!这里有一篇关于扩展属性定义的列表:http://msdn.microsoft.com/en-us/library/ms526844%28EXCHG.10%29.aspx

显示指定加载属性

调用文件夹或者文件夹搜索结果的FindItems方法的时候,虽然有一个重载能够指定要加载的属性,但是某些属性还是不加载的,例如,Item的Sender和From成员的一些属性。这个时候需要使用service的LoadProperties方法,如下:

FindItemsResults<Item> findResults = allItemsFolder.FindItems(filter, BuildPagingView(pageInfo, orderProperty, sortDirection));
pageInfo.Amount = findResults.TotalCount;
if (findResults.Items.Count > )
{
service.LoadPropertiesForItems(findResults, GetPropertySet());
。。。

移动为草稿

我个人感觉把一封邮件移到草稿箱变成草稿是很奇怪的行为,不过我们还是按照网易这么做了。在Exchange里面对一封已经处理完毕(发送、接受)的邮件进行修改是不允许的。so,实际上的做法是把原邮件内容取出来(不是复制),然后新建一封发出去。

此外,Item类型的IsDraft属性可以准确的判断一封邮件是否为草稿,而不是依赖于文件夹。

关于邮件文件夹的大小

默认情况下,空文件夹也会占用零点几KB的大小,不用在意这些细节。

自定义传输规则

如果需要使用编码自定义传输规则,可以参考以下资料:

http://technet.microsoft.com/zh-cn/library/bb124703.aspx

http://code.msdn.microsoft.com/office/Exchange-2013-Build-an-6e544269/sourcecode?fileId=82390&pathId=37453958

http://www.cnblogs.com/xuanye/archive/2011/04/17/2018783.html

继承一个工厂类和一个代理类即可。此外,代码中出现任何未被捕捉到的异常,都会被抛出,但是不会影响邮件路由(代码把邮件删了另当别论,代码导致整个系统挂了另当别论)。

...

EWS小记的更多相关文章

  1. [原]Paste.deploy 与 WSGI, keystone 小记

    Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...

  2. MySql 小记

    MySql  简单 小记 以备查看 1.sql概述 1.什么是sql? 2.sql发展过程? 3.sql标准与方言的关系? 4.常用数据库? 5.MySql数据库安装? 2.关键概念 表结构----- ...

  3. Git小记

    Git简~介 Git是一个分布式版本控制系统,其他的版本控制系统我只用过SVN,但用的时间不长.大家都知道,分布式的好处多多,而且分布式已经包含了集中式的几乎所有功能.Linus创造Git的传奇经历就 ...

  4. 广州PostgreSQL用户会技术交流会小记 2015-9-19

    广州PostgreSQL用户会技术交流会小记 2015-9-19 今天去了广州PostgreSQL用户会组织的技术交流会 分别有两个session 第一个讲师介绍了他公司使用PostgreSQL-X2 ...

  5. 东哥读书小记 之 《MacTalk人生元编程》

         一直以来的自我感觉:自己是个记性偏弱的人.反正从小读书就喜欢做笔记(可自己的字写得巨丑无比,尼玛不科学呀),抄书这事儿真的就常发生俺的身上. 因为那时经常要背诵课文之类,反正为了怕自己忘记, ...

  6. Paypal支付小记

    Paypal支付小记 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !impo ...

  7. linux 下cmake 编译 ,调用,调试 poco 1.6.0 小记

    上篇文章 小记了: 关于 Poco::TCPServer框架 (windows 下使用的是 select模型) 学习笔记. http://www.cnblogs.com/bleachli/p/4352 ...

  8. mongodb入门学习小记

    Mongodb 简单入门(个人学习小记) 1.安装并注册成服务:(示例) E:\DevTools\mongodb3.2.6\bin>mongod.exe --bind_ip 127.0.0.1 ...

  9. 【日常小记】统计后缀名为.cc、.c、.h的文件数【转】

    转自:http://www.cnblogs.com/skynet/archive/2011/03/29/1998970.html 在项目开发时,有时候想知道源码文件中有多少后缀名为.cc..c..h的 ...

随机推荐

  1. 解决myeclipse过期问题

    一般myeclise使用期限为30天,超过之后,会频繁的提醒你,购买软件,很讨厌,有个这个小工具,,以后再也不怕啦!!! 使用方法: 1:将这个类导入到myeclipse包中 2:运行main方法,提 ...

  2. Linux:返回上一次目录 / 返回上次命令目录

    返回上一次目录命令:  cd - 该命令等同于cd $OLDPWD,关于这一点在bash的手册页(可使用命令man bash访问其手册页)中有介绍:An argument of - is equiva ...

  3. 【干货分享】.NET单元测试电子书

     文章目录: 引言 书籍首页 书籍目录 备注 下载 回到顶部 引言:   平时没有项目压力时候,首先想到的是充电学习,要系统学习都会想到购买书籍,或者向同事借阅.买的书多了烦恼也来了,因为大学到现在5 ...

  4. CheckSum

    1.What is Checksum? A check sum is basically a value that is computed from data packet to check its ...

  5. MSBuild could not create or connect to a task host with runtime "CLR2" and architecture "x86".

    vs2010 and vs2012 are installed on target machine. Build c# project using vs2010, following error oc ...

  6. MVC——分页控件

    不管是什么类型的网站,分页都是必不可少的功能实现.在这里记录一下我自己接触过的分页控件: 一. MvcPager控件(记得项目里添加MvcPager.dll的引用) 这里面比较常用的就 ——@Html ...

  7. sql System.Data.SqlClient.SqlError: 无法覆盖文件 'C:\Program Files\Microsoft SQL Server\MSSQL\data\itsm_Data.MDF'。数据库 'my1' 正在使用该文件的解决方案

    对数据库备份进行还原时遇到“sql System.Data.SqlClient.SqlError: 无法覆盖文件 'C:\Program Files\Microsoft SQL Server\MSSQ ...

  8. 只允许输入数字的TextBox控件

    [实例说明] 可以在TextBox控件中轻松地输入文本信息,输入的文本信息可以包括字母.数字.汉字等. 如果需要用户在TextBox控件中填写年龄信息,那么年龄信息应当只允许数字,怎么限制用户输入其他 ...

  9. apache开启gzip的方法

    在Apache中开启gzip压缩方法为: 1. 在httpd.conf 或者博客根目录的.htaccess文件中加入如下规则(Apache服务器需要支持 mod_deflate) 本文出处参考:htt ...

  10. err: exp-00056 rra-12154 exp-00000

    一直用的是win7系统+oracle11g r1 server端(后简称r1). 由于工作需要装了oracle11g r2 client端(后简称r2). 在装r2之前,r1的导出exp是没有问题的. ...