You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Microsoft Graph的EventMessage中提取事件更新后的新日期?

解决Microsoft Graph从EventMessage获取事件更新后日期的问题

嘿,作为经常在Stack Overflow上帮人捋Microsoft Graph问题的老鸟,我来给你拆解下这个问题!

你现在踩的坑其实挺常见:用/v1.0/users/{user}/messages/{id}?$expand=microsoft.graph.eventMessage/event请求拿到的始终是原事件的日期,而非参会者更新后的新时间——这是因为直接关联的event字段指向的是原始事件实体,真正的变更细节藏在另一个专属属性里。

问题根源

当参会者通过“提议新时间”修改事件后,系统发给组织者的通知邮件(EventMessage)里,更新的时间信息并不在event属性中,而是存储在eventMessageDetail这个嵌套属性里。这个属性专门用来记录事件变更的各类细节,包括新时间、参会者状态变动等。

解决方案步骤

  • 修改你的Graph请求,同时展开eventMessageDetail
    把请求调整成这样,就能同时获取原事件和变更细节:

    GET /v1.0/users/{user}/messages/{id}?$expand=microsoft.graph.eventMessage/event,microsoft.graph.eventMessage/eventMessageDetail
    
  • 从返回结果中提取新日期
    在返回的JSON数据里,找到eventMessageDetail节点,里面的newStartTime和newEndTime字段就是你要的新开始/结束日期。示例片段如下:

    "eventMessageDetail": {
      "@odata.type": "#microsoft.graph.eventMessageDetail",
      "meetingRequestType": "proposal",
      "newStartTime": "2024-05-20T14:00:00Z",
      "newEndTime": "2024-05-20T15:00:00Z",
      // 其他变更细节...
    }
    

额外注意事项

  • 权限验证:确保你的应用已经获得了Mail.Read权限(委托或应用权限均可,根据你的场景选择),否则可能无法读取eventMessageDetail的内容。
  • 区分事件操作类型:如果参会者是直接修改事件(而非提议新时间,比如拥有事件编辑权限),meetingRequestType会显示为update,但newStartTime和newEndTime依然会存在于eventMessageDetail中。
  • 确认邮件类型:要确保你处理的确实是事件更新/提案类邮件,可以先检查邮件的messageClass属性是否为IPM.Schedule.Meeting.Request.Updated或IPM.Schedule.Meeting.Request.Proposal。

内容的提问来源于stack exchange,提问作者Joceleyn De Craeke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:17:14