获取邮箱中的所有电子邮件

时间:2011-11-01 12:30:38

标签: c# exchangewebservices

如何在最少量的EWS呼叫中从Exchange 2010获取所有电子邮件?

我们的邮箱有50k +电子邮件,带有2k~文件夹。我已经尝试遍历每个文件夹,但这需要几个小时来获取我的所有电子邮件。我当前的方法是从邮箱中获取所有文件夹,然后创建一个搜索过滤器列表,基本上过滤所有具有父文件夹ID n 的项目。

这是我到目前为止所拥有的。

var allFolders = exchangeService.FindFolders(folderId,
                                             new FolderView(int.MaxValue) {Traversal = FolderTraversal.Deep});
var searchFilterCollection = new List<SearchFilter>();

foreach(var folder in allFolders)
    searchFilterCollection.Add(new SearchFilter.SearchFilterCollection(LogicalOperator.Or, 
        new SearchFilter.IsEqualTo(ItemSchema.ParentFolderId, folder.Id.ToString())));

var itemView = new ItemView(int.MaxValue)
                   {
                       PropertySet = PropertySet.FirstClassProperties
                   };
var findItems = exchangeService.FindItems(folderId, 
    new SearchFilter.SearchFilterCollection(LogicalOperator.Or, searchFilterCollection), itemView);

我收到错误The property can not be used with this type of restriction.

2 个答案:

答案 0 :(得分:2)

如果直接使用EWS而不是EWS托管API,则可以使用FindItemOperation执行此操作。 EWS FindItemOperation将多个parentFolderIds作为输入。

http://msdn.microsoft.com/en-us/library/aa566107(v=exchg.140).aspx

答案 1 :(得分:1)

http://social.technet.microsoft.com/Forums/en-US/exchangesvrdevelopment/thread/4bd4456d-c859-4ad7-b6cd-42831f4fe7ec/

这似乎表明在您的过滤器中无法访问ParentFolderId,因为它尚未加载。

您可以通过将EWS添加到FolderView:

来指示EWS加载它
FolderView view = new FolderView(int.MaxValue) {Traversal = FolderTraversal.Deep};
view.PropertySet.Add(FolderSchema.ParentFolderId);
var allFolders = exchangeService.FindFolders(folderId,view);