遍历文件夹中的每封电子邮件时都可以使用

时间:2019-07-17 20:48:48

标签: c# exchange-server exchangewebservices

我正在浏览包含约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;     
}

2 个答案:

答案 0 :(得分:0)

我建议按定义的过滤器按块提取项目。 ExchangeService.FindItems方法允许指定SearchFilter,该CodeSandbox表示用于缩小搜索结果范围的过滤器。

答案 1 :(得分:0)

看你的代码我会说

offset = pageSize;
pageSize = pageSize + pageSize;

是您的问题,您应该仅将偏移量增加返回的项目数。如果您查看代码,则每次迭代都将页面大小增加1000。节流意味着您不会在一页中获得更多的1000个项目,因此,由于这种逻辑,偏移行实际上是跳过项目。只需使用

offset += findResults.Items.Count

相反,pageSize不应更改,并且不应超过1000,并且偏移量应始终基于返回的项目数。