Microsoft graph api 在Outlook Graph API中,在草稿上调用send后,邮件ID似乎会更改
我正在与Outlook365进行集成,该集成需要跟踪通过应用程序发送的电子邮件回复,以便能够使用Outlook online打开电子邮件 由于Microsoft graph api 在Outlook Graph API中,在草稿上调用send后,邮件ID似乎会更改,microsoft-graph-api,Microsoft Graph Api,我正在与Outlook365进行集成,该集成需要跟踪通过应用程序发送的电子邮件回复,以便能够使用Outlook online打开电子邮件 由于/sendMail返回一个空响应,阅读文档时我注意到,可以使用以下内容创建对现有邮件的草稿回复: POST /v1.0/me/messages/{previous message ID}/createReply 这将返回一条表示已分配消息ID的回复的消息。使用正确的值更新消息后,我将使用以下内容发送消息: POST /v1.0/me/messages/{
/sendMail
返回一个空响应,阅读文档时我注意到,可以使用以下内容创建对现有邮件的草稿回复:
POST /v1.0/me/messages/{previous message ID}/createReply
这将返回一条表示已分配消息ID的回复的消息。使用正确的值更新消息后,我将使用以下内容发送消息:
POST /v1.0/me/messages/{draft message ID}/send
此调用返回一个空响应。尝试检索邮件会导致找不到错误:
GET /v1.0/me/messages/{draft message ID}
然而,我注意到在列出消息之后,在发送消息之后,消息被分配了一个新ID
有没有办法将两个ID关联起来,或者以某种方式跟踪发送的消息ID,以便我可以访问消息的正确(也是最终的)webLink
属性
非常感谢。不幸的是,Microsoft Graph API在调用发送邮件API后未返回发送邮件id 有一些解决方案可以找到sent-message-id
请考虑微软图形API不支持<强>过滤器和<强> OrthBue<强> > < /P>
图形包装器
//Microsoft Graph API用于列表消息的内置方法无法正常工作,因此我们必须实现它
MGraph.geMessagesByUrl=异步函数(url){
const responseString=wait request.get({
url:url,
标题:{授权:`Bearer${this.tokens.access_token}`
})
const data=JSON.parse(responseString)
返回数据.value
}
MGraph.createMessage=异步函数(消息){
//安装microsoft graph api客户端
返回wait client.api('/me/messages').post(message)
}
MGraph.updateMessage=异步函数(messageId,message){
//安装microsoft graph api客户端
返回wait client.api(`/me/messages/${messageId}`)。更新(message)
}
//用于添加附件的Microsoft Graph API内置方法无法正常工作,因此我们必须实现它
MGraph.addAttachmentNative=异步函数(messageId,附件){
常量选项={
方法:“POST”,
网址:`https://graph.microsoft.com/v1.0/me/messages/${messageId}/attachments`,
标题:{
授权:`Bearer${tokens.access_token}`,
“内容类型”:“应用程序/json”
},
正文:JSON.stringify(附件)
}
const responseString=wait request.post(选项)
返回JSON.parse(responseString)
}
MGraph.sendMessage=异步函数(messageId){
//安装microsoft graph api客户端
返回wait client.api(`/me/messages/${messageId}/send`)。post({})
}
发送方
const sender=异步函数(电子邮件、附件){
const createMessageResult=等待MGraph.createMessage(电子邮件)
for(附件的常量附件){
等待MGraph.addAttachmentNative(createMessageResult.id,附件)
}
const updateMessageResult=wait MGraph.updateMessage(createMessageResult.id,email.message)
等待MGraph.sendMessage(updateMessageResult.id)
const conversationId=updateMessageResult.conversationId
返回会话ID
}
列出消息,按conversatinId筛选并获取发送的消息
const generateGetByConversationIdQuery=函数(conversationId){
常量SyncMessagesProjection=[
“id”、“会话id”,
“internetMessageHeaders”、“internetMessageId”,
“createdDateTime”、“lastModifiedDateTime”,
“发件人”、“发件人”、“收件人”、“ccRecipients”、“BCRecipients”,
“hasAttachments”、“subject”、“isDraft”、“isRead”
//“bodyPreview”、“uniqueBody”、“body”
]
常量投影=SyncMessagesProjection.join(',')
常量select=`&$select=${projection}`
const expand='&$expand=attachments($select=id、name、contentType、size、isInline)'
常量筛选器=`$filter=conversationId eq'${conversationId}'`
常数top='&top=100'
常量url=`https://graph.microsoft.com/v1.0/me/messages?${filter}${select}${expand}${top}`
返回url
}
//设置电子邮件和附件对象
const conversationId=发件人(电子邮件、附件)
const url=generateGetByConversationIdQuery(conversationId)
const result=wait MGraph.geMessagesByUrl(url)
//这是你的留言
const sentMessage=result[result.length-1]
Hy@Saeed,我面临同样的问题,我认为您的第三个解决方案可以工作,但我有一个问题,在调用/send
api之后,我可以使用该方法吗?或者/send
需要时间才能生效?@harishsharma可以在/send API之后立即列出消息。Microsoft Graph API太奇怪了,我强烈建议实施完全同步策略以保证数据集成。您始终可以将完全同步过程作为备份解决方案运行。@harishsharma请注意,如果您移动/删除/还原任何资源id,如message.id,都将被更改。