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

关于onSend事件中REST API修改未同步至UI的问题确认及方案咨询

问题确认与解决方案

首先可以明确:这个行为是完全符合预期、可确认的。根源在于Outlook的onSend事件执行逻辑和UI渲染是相互独立的:你通过REST API对草稿邮件的修改是作用在服务器端的邮件对象上,但当前UI绑定的是客户端内存中的邮件实例,不会自动同步服务器端的修改。当onSend事件放行后,Outlook会直接发送客户端当前持有的邮件内容,而非服务器端已修改的版本。

解决办法:使用Office.js客户端API直接修改

要在onSend事件完成前让UI同步更新,并且确保修改后的内容被发送,你需要放弃REST API,转而使用Office.js的邮件项操作API——这些API直接操作客户端当前的邮件对象,修改会实时反映在UI上,且最终发送的就是修改后的内容。

举几个关键操作的代码示例:

  1. 修改收件人
function updateRecipients() {
  Office.context.mailbox.item.to.addAsync(
    ["new-recipient@example.com"],
    { asyncContext: null },
    function(result) {
      if (result.status === Office.AsyncResultStatus.Succeeded) {
        console.log("收件人添加成功");
      } else {
        console.error("添加收件人失败: " + result.error.message);
      }
    }
  );
}
  1. 修改邮件正文
function updateBody() {
  const newBody = "<p>这是修改后的邮件正文内容</p>";
  Office.context.mailbox.item.body.setAsync(
    newBody,
    { coercionType: Office.CoercionType.Html }, // 也可使用 Office.CoercionType.Text 适配纯文本格式
    function(result) {
      if (result.status === Office.AsyncResultStatus.Succeeded) {
        console.log("正文修改成功");
      } else {
        console.error("修改正文失败: " + result.error.message);
      }
    }
  );
}

重要注意事项

  • 在onSend事件中执行这些异步API时,必须确保等待所有修改操作完成后再放行发送事件。可以用Promise封装这些异步方法,再通过async/await控制流程,避免发送时修改还未完成。
  • 如果你因业务需求必须使用REST API(比如涉及复杂服务器端逻辑),那需要在onSend事件中取消原发送操作,待REST API修改完成后,再通过API触发修改后草稿的发送。但这种方案流程更复杂,且会影响用户体验,优先推荐使用客户端API的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:20:32