新建Microsoft Graph变更通知订阅后,如何获取已有未读Outlook邮件?
解决Outlook订阅创建时获取所有未读邮件的问题
要实现创建订阅时让Microsoft发送所有已存在的未读邮件通知,你需要调整订阅负载的核心参数,同时配合必要的逻辑处理:
修改
changeType参数:
当前你的changeType设为"created",这只会触发新创建邮件的通知。要捕获已存在的未读邮件,需要将其改为"created,updated"。因为已存在的未读邮件属于状态未变更(isRead=false)的资源,Graph会将订阅创建时的这类资源视为“符合过滤条件的已更新资源”,从而触发updated类型的通知。保留并验证
notificationQueryOptions:
你当前设置的"notificationQueryOptions":"$filter=isRead eq false"是正确的,它会过滤出所有未读邮件。需要确保这个参数和修改后的changeType配合使用,Graph才会在订阅创建时扫描所有符合条件的现有邮件并发送通知。可选:开启
includeResourceData(如需邮件内容):
如果你需要在通知中直接获取邮件的具体内容,需要在负载中添加"includeResourceData": true参数(若启用加密,还需指定"encryptionCertificate"和"encryptionCertificateId");如果只需要邮件ID等基础信息,可以跳过这一步。
调整后的完整订阅负载示例:
{ "changeType": "created,updated", "notificationUrl": "https://...../notifications", "lifecycleNotificationUrl": "https://...../notifications", "resource": "users/<client_email_address>/mailFolders('Inbox')/messages", "expirationDateTime": "2023-08-24T05:13:01.1216075Z", "clientState": "<random UUID>", "latestSupportedTlsVersion": "v1_2", "notificationQueryOptions":"$filter=isRead eq false", "includeResourceData": true }
- 额外保险逻辑:
由于Graph Webhook可能存在极少数通知遗漏的情况,建议在订阅创建成功后,主动调用Microsoft Graph的邮件查询接口,获取当前所有未读邮件:
这样可以确保不会漏掉任何已存在的未读邮件,和Webhook通知形成互补。GET https://graph.microsoft.com/v1.0/users/<client_email_address>/mailFolders('Inbox')/messages?$filter=isRead eq false
内容的提问来源于stack exchange,提问作者Shrey Soni
相关产品推荐
相关产品推荐

