Microsoft graph api Microsoft Graph";信息“;增量请求使用日期筛选器截断过多结果

Microsoft graph api Microsoft Graph";信息“;增量请求使用日期筛选器截断过多结果,microsoft-graph-api,Microsoft Graph Api,我想我在delta API上发现了一个日期过滤错误 我在使用Office 365 Graph API处理的一个电子邮件帐户上发现,“邮件”Graph API增量请求返回的项目数与预期时间范围内文件夹中的项目数不同。文件夹中有150000个项目,涵盖10年,但delta只返回过去60天左右的最后5000个ish项目 寻呼工作正常 在查询文件夹“收件箱”的graph API时,它总共有154045个项目和57456个未读项目 IUserMailFoldersCollectionPage folder

我想我在delta API上发现了一个日期过滤错误

我在使用Office 365 Graph API处理的一个电子邮件帐户上发现,“邮件”Graph API增量请求返回的项目数与预期时间范围内文件夹中的项目数不同。文件夹中有150000个项目,涵盖10年,但delta只返回过去60天左右的最后5000个ish项目

寻呼工作正常 在查询文件夹“收件箱”的graph API时,它总共有154045个项目和57456个未读项目

IUserMailFoldersCollectionPage foldersPage =
                await client.Users[mailboxid].MailFolders.Request().GetAsync();
我可以使用分页跳过10000、50000或更多消息

model.messages = await client.Users[mailboxid].MailFolders[folderid].Messages.Request().Top(top)
                    .Skip(skip).GetAsync();
带有日期筛选器的增量不起作用 但是当与nextToken和deltaTokens循环时,deltaToken会出现在大约5000封电子邮件之后。基本上,它似乎只返回过去几个月的结果,尽管过滤器说查找过去20年的邮件

下面是如何生成增量请求的示例。时间在这里是硬编码的,但实际上它是一个变量

var sFilter = $"receivedDateTime ge {DateTimeOffset.UtcNow.AddYears(-20).ToString("yyyy-MM-dd")}";
model.messages = await client.Users[mailboxid].MailFolders[folderid].Messages.Delta().Request()
                    .Header("Prefer", "odata.maxpagesize=" + maxpagesize)
                    .Filter(sFilter)
                    .OrderBy("receivedDateTime desc")
                    .GetAsync();
然后在每次分页操作中,我都执行以下操作。“nexttoken”是下一个链接或增量链接,具体取决于从第一个请求返回的内容

model.messages = new MessageDeltaCollectionPage();
                model.messages.InitializeNextPageRequest(client, nexttoken);
                model.messages = await model.messages.NextPageRequest
                    .Header("Prefer", "odata.maxpagesize=" + maxpagesize)
                    .GetAsync();
三角洲无滤池工程 如果我对上面的delta执行了完全相同的代码,但在date上删除了“Filter”操作,那么我将获得文件夹中的所有消息

这不是一个很好的解决方案,因为我通常只需要过去一年或两年的消息,如果有15年的消息,那么查询所有内容都是巨大的浪费

更新日期:2019年12月3日 我还是有这个问题。最近,我再次尝试使用Delta,而之前我从服务器上查询所有内容,尽管我可能只需要最后一个月的数据。但那太浪费了

此代码适用于大多数邮箱,但有时我会遇到邮箱出现此问题

我的代码看起来像这样

string sStartingTime = startingTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss") + "Z";

var messageCollectionPage = await client.Users[mailboxsource.GetMailboxIdFromAccountID()].MailFolders[folder.Id].Messages.Delta().Request()
                                .Filter("receivedDateTime+ge+" + Uri.EscapeDataString(sStartingTime))
                                .Select(select)
                                .Header("Prefer", "odata.maxpagesize=" + preferredPageSize)
                                .OrderBy("receivedDateTime desc")
                                .GetAsync(cancellationToken);


在大约5000个结果时,即使文件夹中有66K个项目,增量请求也会停止返回结果。

Paul,我的同事确认,如果对邮件资源的增量查询应用$filter,确实存在5000个项目的限制。
在第二天内,还将使用此信息更新。感谢您的耐心和支持

嗨,Paul,你能用其他用户邮箱复制这个吗?还是这个特殊的用户?@JeremyThakeMSFT我只在一个邮箱里看到过这个。我有很多其他Office 365帐户没有此问题。最后,我只是查询了所有电子邮件来进行同步。好的,如果这仍然是一个问题,请在这里联系我。@JeremyThakeMSFT我又遇到了这个问题。我能够验证电子邮件是否在他们的收件箱中,我可以使用分页查询它们,但当我使用Delta时,它只返回过去4个月的电子邮件。