如何开发发送后可提示用户保存邮件的Outlook Add-In
Outlook Add-in 发送邮件后触发保存流程的可行实现方案
下面是经过验证的3种可行实现思路,可根据你所用的插件类型(VSTO COM插件/Office JS Web插件)选择:
方案1:自定义标记+已发送文件夹监听(适配所有插件类型)
- 第一步:在
ItemSend事件触发时,为当前待发送的邮件追加专属自定义扩展属性,例如命名为YOUR_ADDIN_NEED_SAVE_PROMPT,赋值为true,该操作不需要提前获取邮件ID,ItemSend事件本身可直接操作当前待发送的邮件对象,操作完成后直接放行邮件发送即可。 - 第二步:为所有账户的「已发送邮件」文件夹注册
ItemAdd事件监听,每次有新邮件进入该文件夹时,先检查邮件是否携带你添加的自定义标记:- 若存在标记,直接弹出确认弹窗询问用户是否需要保存该邮件
- 用户点击确认后,此时已发送邮件已生成稳定的永久ID,直接复用你现有保存流程的逻辑,唤起taskpane展示表单即可
- 适配场景:同时支持VSTO COM插件、Office JS Web插件,兼容性最好,无特殊版本要求
- 注意点:若用户关闭Outlook时邮件仍滞留在发件箱,下次打开Outlook后邮件发送成功进入已发送文件夹时,只要插件正常加载仍可触发监听,不会遗漏
方案2:Smart Alerts+临时信息匹配(仅Office JS Web插件)
如果你的插件是基于Office JS开发的跨平台插件,可使用微软官方提供的Smart Alerts能力:
- 发送邮件触发
ItemSend事件时,调用Smart Alerts弹出自定义确认框,询问用户是否需要保存该邮件 - 若用户选择是,暂存当前邮件的临时标识信息(主题、收件人列表、发件人、创建时间戳、正文前100字符哈希值),放行邮件发送
- 后台短时间轮询已发送邮件文件夹,根据暂存的标识信息匹配到对应已发送邮件,获取到永久ID后唤起taskpane展示保存表单
- 注意点:该能力需要用户使用Microsoft 365 16.0.14326.20000及以上版本的Outlook客户端
方案3:MailItem状态监听(仅VSTO COM插件)
如果你的插件是面向Windows端的VSTO COM插件,可直接用更简单的实现逻辑:
ItemSend事件触发时,直接留存当前MailItem对象的引用- 监听该
MailItem对象的Sent属性变更,当属性变为true时,说明邮件已发送完成,此时可直接获取到邮件的EntryID,弹出确认框和保存表单即可
优化建议
- 匹配已发送邮件时建议使用多维度信息校验,避免出现匹配错误的问题
- 可新增全局开关设置,允许用户自行选择是否开启发送后保存提示,避免对用户造成不必要的打扰
内容的提问来源于stack exchange,提问作者mp3kid
相关产品推荐
相关产品推荐

