如何在Microsoft Graph API中获取邮件的conversationTopic?
问题说明
之前用Exchange Service读取Outlook邮件时能拿到conversationTopic属性,但换成Microsoft Graph API后,只能获取conversationId和conversationIndex。这个conversationTopic是原始邮件主题的规范化形式,和邮件头里的Thread-Topic一致,是只读属性,举个例子:
- 邮件主题:
[EXTERNAL] Test-1→conversationTopic:Test-1 - 邮件主题:
[EXTERNAL] RE: Test-1→conversationTopic:Test-1
我试过用conversationId搜索相关邮件,请求地址是https://graph.microsoft.com/v1.0/me/messages?$filter= conversationId eq 'yourConversationId',但没找到想要的conversationTopic,想问有没有办法在Graph API里获取这个属性?
可行方案
目前Graph API的message资源确实没有直接返回conversationTopic,但可以通过两种方式实现需求:
提取对话首条邮件的主题并规范化
通过conversationId筛选出同对话下的所有邮件,按创建时间升序排序后取第一封(也就是原始邮件),再手动移除主题里的前缀(比如[EXTERNAL]、RE:、FW:这类),就能得到和conversationTopic一致的内容。
请求示例:GET https://graph.microsoft.com/v1.0/me/messages?$filter=conversationId eq '{conversationId}'&$orderby=createdDateTime asc&$top=1读取邮件头里的Thread-Topic字段
请求邮件的internetMessageHeaders属性,在返回的邮件头列表里找到Name为Thread-Topic的项,它的Value就是conversationTopic的内容。
请求示例:GET https://graph.microsoft.com/v1.0/me/messages/{messageId}?$select=internetMessageHeaders
注:极少数情况下对话邮件可能没有
Thread-Topic头,这时就只能用第一种方法兜底。
内容的提问来源于stack exchange,提问作者Sparsh Verma

