循环浏览文件夹中的每封电子邮件时封顶

Capping out when looping through every email in a folder

我正在遍历包含大约 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;     
}

我建议使用定义的过滤器按块提取项目。 ExchangeService.FindItems method allows specifying a SearchFilter 表示用于缩小搜索结果范围的过滤器。

看看你的代码我会说

offset = pageSize;
pageSize = pageSize + pageSize;

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

offset += findResults.Items.Count

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