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

如何获取M365组邮箱完整邮件内容并存储到SharePoint库?

解决方案

1. 通过Graph API获取完整邮件的MIME内容

组邮箱的conversation post正文仅展示最新片段,但对应的完整邮件会保存在组的收件箱中。可以通过以下步骤获取完整内容:

  • 从Webhook触发的通知payload中拿到postId、conversationId、threadId和groupId,调用GET /groups/{group-id}/conversations/{conversation-id}/threads/{thread-id}/posts/{post-id}获取帖子的internetMessageId(即邮件的Message-ID)。
  • 用该Message-ID查询组收件箱中的对应邮件:GET /groups/{group-id}/mailFolders/inbox/messages?$filter=internetMessageId eq '{message-id}'。
  • 拿到邮件ID后,请求GET /groups/{group-id}/mailFolders/inbox/messages/{message-id}/$value获取完整的MIME格式内容,解析后即可得到包含全部对话历史的正文和附件。

需要确保Azure Function的应用权限包含Mail.Read(组邮箱权限)或Group.ReadWrite.All,并完成管理员同意授权。

2. 支持Outlook拖放邮件场景

用户从Outlook拖放邮件至组邮箱时,本质是生成转发邮件或新的conversation post,同样可以通过上述方法:

  • 拖放生成的post会关联到组收件箱中的完整邮件,通过internetMessageId即可定位到原始邮件,获取完整内容。
  • 无需额外处理拖放的特殊逻辑,保持和入站邮件一致的处理流程即可。

3. 直接订阅组收件箱的邮件事件(更优方案)

绕开conversation/post的限制,直接订阅组邮箱收件箱的邮件创建事件:

  • 调用POST /subscriptions创建订阅,设置resource为/groups/{group-id}/mailFolders/inbox/messages,changeType为created。
  • 当有新邮件(包括入站邮件和拖放邮件)进入组收件箱时,Webhook直接触发,通知payload中会包含完整的邮件ID,直接调用GET /groups/{group-id}/mailFolders/inbox/messages/{message-id}或/messages/{message-id}/$value即可获取完整内容和附件。

注意事项

  • 必须使用应用权限而非委托权限,因为Azure Function是后台无用户交互运行。
  • 解析MIME内容时,可使用对应语言的邮件处理库(如.NET的System.Net.Mail.MailMessage、Python的email模块)提取正文和附件。
  • 若组邮箱邮件量较大,可结合delta查询优化批量处理效率。

内容的提问来源于stack exchange,提问作者Jan-Bernd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:02:44