Graph API /users/{id}/mailFolders/{id}/messages/delta 最多仅返回5000封邮件
问题根因说明
/users/{id}/mailFolders/{id}/messages/delta接口的初始全量同步阶段,官方预设了单周期返回对象上限为5000,该限制和分页逻辑、是否带过滤参数无关,属于接口默认行为。
排查确认项
- 确认当前调用属于首次全量同步:未传入历史deltaToken、直接调用delta接口拉取全量邮件,该场景下触发5000上限为预期情况
- 确认请求头未添加限制返回数量的特殊参数,比如
Prefer: odata.maxpagesize设置过小、或者Prefer: deltamaxitems设置为5000
解决方案
- 方案1:全量拉取阶段改用普通消息列表接口
初始全量同步时调用/users/{id}/mailFolders/{id}/messages接口,迭代返回的@odata.nextLink分页拉取所有邮件,该接口无5000总数量限制。全量拉取完成后再调用delta接口获取最新deltaToken,后续增量同步继续使用delta接口即可。 - 方案2:调整delta接口的返回上限
在delta接口的请求头中添加参数Prefer: deltamaxitems=100000,该参数可调整单轮delta同步的总返回上限,最高支持设置为100000,足以覆盖单文件夹10000+邮件的拉取需求。调整后仍需按原有逻辑迭代所有skipToken直到获取最终deltaToken,累计返回量即可超过5000。
内容的提问来源于stack exchange,提问作者方宇凡
相关产品推荐
相关产品推荐

