如何禁用Outlook插件在ItemSend事件中关闭邮件时的警告?
Outlook Web插件ItemSend事件中关闭邮件的警告问题解决
问题背景
我们的Outlook Web插件在ItemSend事件中获取邮件全量信息,后续通过Graph API完成发送。近期出现两个问题:
- 调用
Office.context.mailbox.item.close()时会弹出关闭确认警告,用户选择取消后,服务仍会发送邮件但草稿未删除,引发混乱 - 改用
closeAsync({ discardItem: true })后,原警告消失,但出现错误提示“邮件已移至草稿文件夹”(实际无草稿存在)
该警告仅在同步执行的ItemSend事件中触发,侧边栏调用关闭则无此问题。
解决方案
核心思路是调整ItemSend事件的执行模式,阻止Outlook默认发送流程,避免触发内置的草稿/警告逻辑:
1. 修改事件配置为异步执行
更新插件的XML配置,将ItemSend事件的执行模式改为异步:
... <ExtensionPoint xsi:type="Events"> <Event Type="ItemSend" FunctionExecution="asynchronous" FunctionName="onSendHandler"/> </ExtensionPoint> ...
2. 调整事件处理函数逻辑
在处理函数中先阻止默认发送行为,再异步关闭并丢弃邮件,最后执行Graph API发送:
function onSendHandler(event) { // 阻止Outlook默认的发送流程 event.completed({ allowEvent: false }); // 第一步:获取并处理邮件全量信息 // (此处保留你的原有数据处理逻辑) // ... // 第二步:异步关闭并丢弃邮件,避免触发草稿相关警告 Office.context.mailbox.item.closeAsync({ discardItem: true }, (result) => { if (result.status === Office.AsyncResultStatus.Succeeded) { // 第三步:调用Graph API发送邮件 // (此处执行你的Graph API发送逻辑) // ... } else { console.error('关闭邮件失败:', result.error); } }); }
逻辑说明
- 改为异步执行后,我们可以通过
event.completed({ allowEvent: false })完全接管发送流程,Outlook不会再触发内置的发送/草稿生成逻辑 discardItem: true参数会直接丢弃当前邮件,不会留存草稿,因此不会出现“移至草稿文件夹”的错误提示- 确保在关闭邮件前已经完成所有邮件信息的获取,避免数据丢失
内容的提问来源于stack exchange,提问作者hlaliberte
相关产品推荐
相关产品推荐

