Microsoft graph api 在Outlook Graph API中,在草稿上调用send后,邮件ID似乎会更改

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/{

我正在与Outlook365进行集成,该集成需要跟踪通过应用程序发送的电子邮件回复,以便能够使用Outlook online打开电子邮件

由于
/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

  • 按internet邮件id搜索
  • 创建草稿、更新正文并发送邮件(使用草稿邮件id)
  • 列出消息并按会话ID进行筛选,然后获取最新消息
  • 解决方案1和2不稳定,Microsoft不提供可靠的文档,并且不容易解决问题

    但是,第三种解决方案效果很好

    请考虑微软图形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,都将被更改。