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

Office.js开发Outlook插件:获取刚发送邮件的ItemId方案咨询

解决方案:Outlook发送新邮件后自动获取邮件标识同步到API

一、通过OnMessageSend设置自定义属性,再用Graph查询匹配

你可以借助OnMessageSend事件在邮件发送前设置唯一自定义属性,之后通过Graph在已发送文件夹中精准定位目标邮件:

  1. 发送前添加自定义属性
    在OnMessageSend的处理逻辑里,给待发送邮件生成一个唯一标识(比如UUID)并绑定为自定义属性:
Office.context.mailbox.item.customproperties.setAsync(
  { "SyncMarker": "生成的唯一UUID" },
  function (asyncResult) {
    if (asyncResult.status === Office.AsyncResultStatus.Succeeded) {
      asyncResult.completed({ allowEvent: true }); // 允许邮件发送
    } else {
      asyncResult.completed({ allowEvent: false }); // 设置失败时阻止发送
    }
  }
);

注意:OnMessageSend是同步事件,必须在Outlook规定的时间窗口内完成操作并调用completed,否则会被拦截。

  1. 发送后通过Graph匹配属性查询邮件
    邮件发送完成后,你的API可以调用Graph接口,通过自定义属性筛选已发送文件夹中的目标邮件:
GET https://graph.microsoft.com/v1.0/me/mailFolders/sentitems/messages?$filter=singleValueExtendedProperties/any(ep: ep/id eq 'String {00020329-0000-0000-C000-000000000046} Name SyncMarker' and ep/value eq '之前生成的UUID')

查询到邮件后即可获取其id,完成后续的信息存储操作。

二、扫描已发送文件夹获取最新邮件

如果不想依赖自定义属性,也可以在邮件发送后,通过Graph拉取已发送文件夹中最新的邮件:

  1. 触发时机
    在OnMessageSend中允许邮件发送后,启动一个异步任务(比如用setTimeout延迟3-5秒,给Outlook同步到已发送文件夹的时间),避免在同步回调中执行耗时操作导致超时。

  2. Graph查询最新邮件
    调用接口获取已发送文件夹中按发送时间倒序的第一封邮件:

GET https://graph.microsoft.com/v1.0/me/mailFolders/sentitems/messages?$top=1&$orderby=sentDateTime desc&$select=id,subject,sentDateTime

这种方法的局限性是:若用户短时间内连续发送多封邮件,可能会匹配错误,建议结合邮件主题、发送时间做二次校验。

关键注意事项

  • 权限配置:确保插件和API拥有Mail.ReadWrite的Graph权限,才能访问已发送文件夹并读取邮件详情。
  • 异步处理:所有涉及外部API调用的逻辑都要放在异步任务中,不要占用OnMessageSend的同步回调时间窗口。
  • 标识唯一性:使用UUID作为自定义属性值,避免和其他邮件的属性冲突,保证查询准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:12:35