我正在浏览包含约26,000封电子邮件的文件夹中的每封电子邮件。当我的程序达到6,000电子邮件(基于计数器)时,它将结束。为什么没有遍历每封电子邮件?
int offset = 0;
int pageSize = 1000;
bool more = true;
ItemView view = new ItemView(pageSize, offset,OffsetBasePoint.Beginning);
view.PropertySet = PropertySet.FirstClassProperties;
FindItemsResults<Item> findResults = exchsvc1.FindItems(folder, view);
while (more)
{
foreach (Item mail in findResults.Items)
{
do stuff
}
offset = pageSize;
pageSize = pageSize + pageSize;
view = new ItemView(pageSize, offset, OffsetBasePoint.Beginning);
findResults = exchsvc1.FindItems(folder, view);
more = findResults.MoreAvailable;
}
答案 0 :(得分:0)
我建议按定义的过滤器按块提取项目。 ExchangeService.FindItems方法允许指定SearchFilter,该CodeSandbox表示用于缩小搜索结果范围的过滤器。
答案 1 :(得分:0)
看你的代码我会说
offset = pageSize;
pageSize = pageSize + pageSize;
是您的问题,您应该仅将偏移量增加返回的项目数。如果您查看代码,则每次迭代都将页面大小增加1000。节流意味着您不会在一页中获得更多的1000个项目,因此,由于这种逻辑,偏移行实际上是跳过项目。只需使用
offset += findResults.Items.Count
相反,pageSize不应更改,并且不应超过1000,并且偏移量应始终基于返回的项目数。