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
相关产品推荐
相关产品推荐

