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

Outlook插件REST调用获取附件详情遇RequestBroker--ParseUri报错求助

问题原因与解决办法

核心错误点

你遇到的RequestBroker--ParseUri错误,根源是直接使用了EWS格式的ItemId拼接REST API地址。Outlook插件中Office.context.mailbox.item.itemId返回的是EWS(Exchange Web Services)兼容的ID,而Outlook REST API要求使用REST格式的ID,直接用原ID会导致API无法识别资源路径。

具体修正步骤

  1. 转换ItemId为REST格式
    使用Office.context.mailbox.convertToRestId()方法,将EWS格式的itemId转换为REST API兼容的ID,指定目标版本为Office.MailboxEnums.RestVersion.v2_0。

  2. 修正URL构造逻辑
    用转换后的REST格式ID替换原EWS ID,拼接API地址。如果要获取单个附件的内容(/$value),附件ID如果是从EWS获取的,同样需要用convertToRestId转换。

  3. 修复代码中未定义变量的问题
    你代码里attachment.name的attachment变量未定义,需要先获取附件列表,再针对单个附件请求内容。

修正后的代码示例

// 获取当前邮件的EWS格式ID
const ewsItemId = Office.context.mailbox.item.itemId;
// 转换为REST格式ID
const restItemId = Office.context.mailbox.convertToRestId(
  ewsItemId,
  Office.MailboxEnums.RestVersion.v2_0
);

Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) {
  if (result.status === Office.AsyncResultStatus.Succeeded) {
    const callbackToken = result.value;
    const headers = { Authorization: `Bearer ${callbackToken}` };

    // 1. 先获取该邮件的所有附件列表
    const attachmentsListUrl = `${Office.context.mailbox.restUrl}/v2.0/me/messages/${restItemId}/attachments`;
    fetch(attachmentsListUrl, { headers })
      .then(response => response.json())
      .then(data => {
        // 假设取第一个附件,获取其REST格式ID
        const firstAttachment = data.value[0];
        const restAttachmentId = Office.context.mailbox.convertToRestId(
          firstAttachment.Id,
          Office.MailboxEnums.RestVersion.v2_0
        );

        // 2. 请求该附件的内容
        const attachmentContentUrl = `${Office.context.mailbox.restUrl}/v2.0/me/messages/${restItemId}/attachments/${restAttachmentId}/$value`;
        return fetch(attachmentContentUrl, { headers });
      })
      .then(response => response.arrayBuffer())
      .then(arrayBuffer => {
        // 处理附件内容,比如转base64
        const base64Data = arrayBufferToBase64(arrayBuffer);
        console.log("附件内容转换完成");
      })
      .catch(error => {
        console.log("获取附件失败:", error);
      });
  }
});

关于你尝试的第二种URL的问题

${item.itemId}仍然是EWS格式的ID,没有转换为REST格式,所以同样会触发资源找不到的错误,必须先转换ID格式再使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:06:29