EWS小记

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

 

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

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

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

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

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

“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 > 0)
                {
                    service.LoadPropertiesForItems(findResults, GetPropertySet());
。。。
View Code

移动为草稿

我个人感觉把一封邮件移到草稿箱变成草稿是很奇怪的行为,不过我们还是按照网易这么做了。在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 

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

...

原文地址:https://www.cnblogs.com/lightluomeng/p/3473209.html