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

Outlook插件:如何获取会话中回复目标邮件的正文?

解决方案:精准获取回复目标邮件的正文

核心思路

不要通过会话ID过滤全会话邮件,而是直接定位被回复的原始邮件ID,再调用MS Graph的单邮件接口获取正文,从根源避免会话邮件冗余问题。

步骤1:校验当前撰写场景

只有在回复、回复全部或转发的撰写窗口中,才能拿到被回复的原始邮件信息,先做场景判断:

Office.context.mailbox.item.getComposeTypeAsync((composeResult) => {
  if (composeResult.status !== Office.AsyncResultStatus.Succeeded) {
    console.error('获取撰写类型失败:', composeResult.error);
    return;
  }

  const validComposeTypes = [
    Office.MailboxEnums.ComposeType.Reply,
    Office.MailboxEnums.ComposeType.ReplyAll,
    Office.MailboxEnums.ComposeType.Forward
  ];

  if (!validComposeTypes.includes(composeResult.value)) {
    console.log('当前非回复/转发场景,无法获取目标邮件');
    return;
  }

  // 进入目标邮件ID获取流程
  getOriginalMessageId();
});

步骤2:获取被回复的原始邮件ID

通过Office.js提供的originalItem对象异步获取目标邮件的唯一ID:

function getOriginalMessageId() {
  Office.context.mailbox.item.originalItem.getIdAsync((idResult) => {
    if (idResult.status !== Office.AsyncResultStatus.Succeeded) {
      console.error('获取原始邮件ID失败:', idResult.error);
      return;
    }

    const targetMsgId = idResult.value;
    // 调用Graph接口获取正文
    fetchTargetMessageBody(targetMsgId);
  });
}

步骤3:调用MS Graph获取目标邮件正文

用Office.js获取的授权Token调用Graph单邮件接口,直接拿到目标邮件的正文内容:

function fetchTargetMessageBody(messageId) {
  // 获取Graph授权Token(需Manifest配置对应权限)
  Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, (tokenResult) => {
    if (tokenResult.status !== Office.AsyncResultStatus.Succeeded) {
      console.error('获取授权Token失败:', tokenResult.error);
      return;
    }

    const accessToken = tokenResult.value;
    const graphUrl = `https://graph.microsoft.com/v1.0/me/messages/${encodeURIComponent(messageId)}`;

    fetch(graphUrl, {
      method: 'GET',
      headers: {
        'Authorization': `Bearer ${accessToken}`,
        'Content-Type': 'application/json'
      }
    })
    .then(res => {
      if (!res.ok) throw new Error(`Graph请求失败: ${res.statusText}`);
      return res.json();
    })
    .then(msg => {
      // 目标邮件正文存于msg.body.content,支持HTML或纯文本格式
      const targetBody = msg.body.content;
      console.log('目标邮件正文:', targetBody);
      // 此处可添加正文处理逻辑(如插入到当前撰写窗口)
    })
    .catch(err => console.error('处理Graph响应失败:', err));
  });
}

关键配置注意事项

  • 插件Manifest中需配置足够权限:<Permissions>ReadWriteMailbox</Permissions>(或至少MailRead)
  • 确保插件在撰写模式下激活,需在Manifest的<Rule>中配置ItemIs为Message且FormType为Edit

内容的提问来源于stack exchange,提问作者Noman Aslam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:28:23