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

Office.js开发Outlook加载项时cc.getAsync、to.getAsync调用无效问题

问题根因

cc.getAsync、to.getAsync调用后无可见效果,核心是两个问题:

  • 两个接口返回的asyncResult.value不是字符串类型,而是由收件人信息对象组成的数组,每个对象包含displayName(显示名)、emailAddress(邮箱地址)属性,直接将数组/对象插入HTML时,要么渲染为不可读的[object Object],要么因为格式问题没有可见内容。
  • 代码没有添加失败分支的错误处理,权限不足、调用时机错误等问题导致的接口调用失败被完全忽略,看不到任何报错提示。
修复代码

获取抄送字段

const item = Office.context.mailbox.item;
item.cc.getAsync(function (asyncResult) {
  if (asyncResult.status === Office.AsyncResultStatus.Failed) {
    const errMsg = `获取抄送失败:${asyncResult.error.message}`;
    console.error(errMsg);
    document.getElementById("message").innerHTML = `<h2 class="message">${errMsg}</h2>`;
    document.getElementById("message").style.visibility = "visible";
    return;
  }
  // 解析收件人数组,拼接为可读字符串
  const ccText = asyncResult.value
    .map(contact => `${contact.displayName} <${contact.emailAddress}>`)
    .join("; ");
  document.getElementById("message").innerHTML = `<h2 class="message">抄送:${ccText}</h2>`;
  document.getElementById("message").style.visibility = "visible";
});

获取收件人字段

const item = Office.context.mailbox.item;
item.to.getAsync(function (asyncResult) {
  if (asyncResult.status === Office.AsyncResultStatus.Failed) {
    const errMsg = `获取收件人失败:${asyncResult.error.message}`;
    console.error(errMsg);
    document.getElementById("message").innerHTML = `<h2 class="message">${errMsg}</h2>`;
    document.getElementById("message").style.visibility = "visible";
    return;
  }
  const toText = asyncResult.value
    .map(contact => `${contact.displayName} <${contact.emailAddress}>`)
    .join("; ");
  document.getElementById("message").innerHTML = `<h2 class="message">收件人:${toText}</h2>`;
  document.getElementById("message").style.visibility = "visible";
});

可正常运行的正文获取逻辑参考

你之前写的正文获取逻辑可以正常运行,本质是因为body.getAsync在指定Office.CoercionType.Html后返回的value就是可直接渲染的HTML字符串,不需要额外解析。

item.body.getAsync(Office.CoercionType.Html, function callback(result) {
  if (result.status === Office.AsyncResultStatus.Succeeded) {
    document.getElementById("message").innerHTML = `<h2 class="message">${result.value}</h2>`;
    document.getElementById("message").style.visibility = "visible";
  }
});
排查 Checklist

如果替换代码后仍无法正常获取,依次检查以下配置:

  • 加载项清单文件中配置的权限等级至少为ReadItem,如果需要在撰写场景下修改收件人信息,需要升级到ReadWriteItem权限。
  • 所有Office JS API的调用必须放在Office.onReady或Office.initialize的回调中执行,不要在页面脚本加载后立刻调用,否则会因为宿主未完成初始化导致接口无响应。
  • 测试用的Outlook客户端版本支持1.1及以上的邮箱要求集,to、cc字段的读取接口从1.1版本开始就已支持,排除过老客户端的兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 22:24:31