如何在最少量的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.
。
答案 0 :(得分:2)
如果直接使用EWS而不是EWS托管API,则可以使用FindItemOperation执行此操作。 EWS FindItemOperation将多个parentFolderIds作为输入。
http://msdn.microsoft.com/en-us/library/aa566107(v=exchg.140).aspx
答案 1 :(得分:1)
这似乎表明在您的过滤器中无法访问ParentFolderId,因为它尚未加载。
您可以通过将EWS添加到FolderView:
来指示EWS加载它FolderView view = new FolderView(int.MaxValue) {Traversal = FolderTraversal.Deep};
view.PropertySet.Add(FolderSchema.ParentFolderId);
var allFolders = exchangeService.FindFolders(folderId,view);