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

Outlook Add-In:When a mail is opened事件及infobar显示问题咨询

邮件打开时显示Infobar的实现方案

核心结论

目前没有专门监听邮件打开动作的原生EventListener,但可以通过以下两种方案实现需求,优先满足你显示infobar的要求:

方案1:利用ItemChanged事件+状态判断

当用户切换邮件(包括从列表进入打开状态、在已打开邮件间切换)时,ItemChanged事件会触发。你可以在回调里判断当前邮件状态,然后调用infobar显示API:

// 注册事件监听
Office.context.mailbox.addHandlerAsync(Office.EventType.ItemChanged, handleItemChange);

function handleItemChange() {
  const currentItem = Office.context.mailbox.item;
  // 仅对邮件类型执行操作
  if (currentItem?.itemType === Office.MailboxEnums.ItemType.Message) {
    // 显示infobar
    currentItem.displayInformationalMessageAsync(
      "提示标题",
      "这是邮件打开时要展示的内容",
      {
        icon: Office.MailboxEnums.InfobarIcon.Information,
        persistent: false // 设为true则infobar会一直保留,直到用户关闭
      },
      (asyncResult) => {
        if (asyncResult.status === Office.AsyncResultStatus.Failed) {
          console.error("显示infobar失败:", asyncResult.error.message);
        }
      }
    );
  }
}

补充优化:可以通过记录currentItem.itemId来避免重复显示(比如用一个Set存储已处理过的邮件ID,触发时先判断是否已存在)。

方案2:插件启动时直接触发

如果你的插件设置为仅在邮件打开时激活(比如在清单文件里配置Rule为ItemIs且ItemType为Message),可以在插件初始化阶段直接执行显示逻辑:

Office.initialize = (reason) => {
  const currentItem = Office.context.mailbox.item;
  if (currentItem) {
    currentItem.displayInformationalMessageAsync(
      "提示标题",
      "邮件打开时的提示内容",
      { icon: Office.MailboxEnums.InfobarIcon.Information }
    );
  }
};

这种方式适合插件仅在邮件打开场景下加载的需求,启动即触发infobar显示。

关键说明

  • displayInformationalMessageAsync是Office JavaScript API中专门用于显示infobar的官方方法,完全符合你的优先需求。
  • 两种方案都不需要依赖设置邮件类别等替代手段,直接实现邮件打开时的infobar展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:05:18