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

基于Yeoman的Outlook加载项:如何生成.msg/.eml邮件文件?

解决方案:获取/生成Outlook邮件的.msg/.eml文件

一、服务器端直接生成(优先推荐)

1. 通过Outlook v2 API获取.eml文件

你当前在用的Outlook v2 API支持直接拉取邮件的MIME内容,这就是标准的.eml格式。请求时先通过$select=Id,InternetMessageId拿到邮件ID,再调用/messages/{id}/$value端点获取原始二进制数据,直接写入磁盘就是合法的.eml文件。

示例请求(服务器端):

GET https://outlook.office.com/api/v2.0/me/messages/{message-id}/$value
Authorization: Bearer {your-access-token}

2. 从.eml转换为.msg格式

.msg是Outlook专用二进制格式,没有原生API直接生成,可借助第三方工具转换:

  • .NET环境:用Microsoft.Office.Interop.Outlook或MsgReader库加载.eml后保存为.msg
  • Python环境:用msg-extractor或依赖本地Outlook客户端的pywin32转换
  • Node.js环境:用msgparser或调用第三方转换服务

3. 迁移到Graph API的令牌解决方案

要获取Graph API兼容的令牌,需调整加载项配置:

  • 在manifest.xml里把权限范围从Outlook API的Mail.Read等替换为Graph API的对应权限(如Mail.ReadWrite)
  • 使用Office.context.auth.getAccessTokenAsync获取Graph令牌,前提是加载项配置了对应权限且用户完成授权
  • 之后通过Graph API的/me/messages/{id}/$value端点获取邮件MIME内容,逻辑和Outlook API一致,但Graph是官方长期支持的方案

注意:Office.context.mailbox.restUrl返回Outlook API地址是因为加载项默认配置了Outlook权限,切换到Graph权限后直接用固定端点https://graph.microsoft.com/v1.0即可,无需依赖该属性。

二、客户端生成后上传

Outlook.js无法直接获取邮件原始MIME内容,可通过间接方式实现:

  1. 调用Office.context.mailbox.item.saveAsync将邮件临时保存到用户Outlook文件夹
  2. 服务器端通过API拉取该邮件的MIME内容
  3. 完成后删除临时保存的邮件
    这种方式需要额外权限和操作步骤,效率不如服务器端直接获取。

总结:优先用服务器端API获取MIME内容生成.eml,再转.msg;同时建议迁移到Graph API,用getAccessTokenAsync解决令牌兼容问题,规避Outlook API弃用风险。

内容的提问来源于stack exchange,提问作者Simon Hill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:50:27