启用ATP的Exchange Online:如何用MSGraph过滤未完成扫描的邮件?
过滤未完成ATP交付后扫描邮件的方法
针对你遇到的问题,确实有几种方法可以识别并过滤掉还在等待ATP扫描的邮件,具体如下:
通过ATP专属邮件头过滤
ATP完成扫描后会给邮件添加特定的头部信息,比如X-MS-Exchange-Organization-Antispam-Report或者X-MS-Exchange-Organization-ATP-Detection。你可以在MS Graph的查询里加过滤条件,只拉取包含这些头的邮件。示例请求:GET /me/mailFolders/inbox/messages?$filter=internetMessageHeaders/any(h: h/name eq 'X-MS-Exchange-Organization-Antispam-Report')这样就能自动排除还没生成ATP相关头的未扫描邮件。
按接收时间延迟筛选
既然问题都出在下载发起前1分钟内的邮件,直接在查询里设置时间过滤,只获取早于当前时间1分钟以上的邮件就行。示例请求:GET /me/mailFolders/inbox/messages?$filter=receivedDateTime le @{addMinutes(utcNow(), -1)}这种方法简单直接,刚好适配你每10分钟一次的下载周期,完美避开ATP的扫描窗口。
辅助检查交付状态
部分未完成扫描的邮件会处于临时交付状态,你可以查看邮件的deliveryStatus属性判断是否完成交付。不过这个属性不是所有场景都能返回明确值,只能当辅助验证手段用。
另外,也可以调整下载流程:碰到下载失败的邮件,标记成待重试,下一个10分钟周期再尝试下载。这样不用额外过滤,也能保证所有邮件最终都能被处理。
内容的提问来源于stack exchange,提问作者Sdev
相关产品推荐
相关产品推荐

