循环浏览文件夹中的每封电子邮件时封顶
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,并且您的偏移量应始终基于返回的项目数。
我正在遍历包含大约 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,并且您的偏移量应始终基于返回的项目数。