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

Office.Recipients接口getAsync调用返回空而非邮件地址问题

Outlook 外接程序 Office.Recipients.getAsync 读取不到已输入收件人的解决方法

问题表现

  • 邮件编辑页to/cc/bcc字段已输入邮件地址,调用Office.Recipients对应的getAsync方法时返回空数组,无法获取已填写的地址内容。

复现步骤

  1. 新建邮件,在收件人/抄送/密送输入框中输入目标邮件地址,不执行额外按键操作
  2. 打开Script Lab的「Compose Message To」示例加载项
  3. 点击「Get who this is to」按钮触发接口调用,返回结果为空,已输入的收件人未完成解析。

设计逻辑说明

Outlook收件人字段默认采用「用户触发解析」的交互逻辑:

仅当用户按下Tab键、空格键,或输入分号;确认当前输入的收件人时,客户端才会将输入框内的纯文本校验、解析为标准收件人对象,写入可被外接程序接口读取的收件人集合。
未触发上述确认操作时,输入的内容仅为输入框内的临时文本,不会被getAsync接口识别读取。

规避方案

目前官方未提供getAsync调用时自动强制解析未确认收件人文本的原生API,可通过以下两种方式解决:

  • 前置触发解析逻辑
    调用getAsync前通过临时转移焦点的方式,模拟用户确认操作触发客户端解析,参考代码:
    function getRecipients(callback) {
      Office.context.mailbox.item.to.getAsync((res) => {
        if (res.status !== Office.AsyncResultStatus.Succeeded) {
          return callback(res.error);
        }
        // 未获取到收件人时,触发失焦强制解析
        if (res.value.length === 0) {
          document.activeElement.blur();
          setTimeout(() => {
            Office.context.mailbox.item.to.getAsync((finalRes) => {
              callback(null, finalRes.value);
            });
          }, 200);
        } else {
          callback(null, res.value);
        }
      });
    }
    
    // 调用示例
    getRecipients((err, recipients) => {
      if (err) return console.error(err);
      console.log("获取到的收件人列表:", recipients);
    });
    
  • 交互引导
    在触发收件人读取的操作入口增加提示:请输入完每个收件人后按分号/回车确认,再执行提交操作,引导用户主动完成收件人解析,避免临时文本未入库的问题。

注意事项

  • 上述焦点转移方案兼容Outlook网页版、2016+版本Windows桌面客户端、Mac端Outlook
  • 禁止通过DOM注入直接读取原生收件人输入框的文本内容,该操作违反Office外接程序安全规范,会导致外接程序无法通过Microsoft AppSource审核。

内容的提问来源于stack exchange,提问作者raphaël schaffo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:33:21