VSTO中取消MeetingItem的Send事件时,如何阻止收件箱会议邀请被删除?
阻止编辑会议响应后取消发送时原邀请被删除的方法
核心思路
在「编辑响应后再发送」的场景中,Outlook会在创建响应邮件时提前将原会议标记为已处理并准备移除收件箱——即使你在Send事件中取消发送,这个移除操作仍会执行。因此需要同时处理Send事件和收件箱Items的移除事件,双管齐下阻止原邀请被删除。
具体实现步骤
1. 在Send事件中恢复原会议邀请的状态
当触发MeetingResponseItem的Send事件并设置cancel=true时,找到对应的原MeetingItem,将其响应状态重置为未响应,并保存修改:
private void MeetingResponseItem_Send(ref bool Cancel) { // 获取对应的原会议邀请 MeetingItem originalMeeting = (MeetingItem)this.MeetingResponse.GetAssociatedAppointment(true).GetAssociatedMeetingItem(); if (originalMeeting != null) { // 重置响应状态为未响应 originalMeeting.MeetingResponseStatus = OlMeetingResponseStatus.olMeetingResponseNone; // 如果原会议已被标记为删除,取消删除标记 if (originalMeeting.Deleted) { originalMeeting.UnDelete(); } // 保存修改 originalMeeting.Save(); } Cancel = true; }
2. 监听收件箱的Items.ItemRemove事件,拦截原邀请的移除
在Add-in启动时,为收件箱的Items集合注册ItemRemove事件,当检测到被移除的是目标会议邀请时,将其恢复到收件箱:
private Items inboxItems; private void ThisAddIn_Startup(object sender, System.EventArgs e) { MAPIFolder inbox = Application.Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox); inboxItems = inbox.Items; inboxItems.ItemRemove += InboxItems_ItemRemove; } private void InboxItems_ItemRemove() { // 由于ItemRemove事件无法直接获取被移除的对象,通过最近的已删除邮件恢复 MAPIFolder deletedItems = Application.Session.GetDefaultFolder(OlDefaultFolders.olFolderDeletedItems); if (deletedItems.Items.Count > 0) { object lastDeleted = deletedItems.Items[1]; if (lastDeleted is MeetingItem meetingItem) { // 通过时间窗口、响应状态筛选目标会议邀请 if (meetingItem.MeetingResponseStatus == OlMeetingResponseStatus.olMeetingResponseAccepted && DateTime.Now.Subtract(meetingItem.LastModificationTime).TotalSeconds < 5) { // 移回收件箱 meetingItem.Move(Application.Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox)); // 重置响应状态 meetingItem.MeetingResponseStatus = OlMeetingResponseStatus.olMeetingResponseNone; meetingItem.Save(); } } } }
注意事项
- ItemRemove事件无法直接获取被移除的Item对象,只能通过已删除邮件文件夹取最近删除的项判断,需添加时间窗口、响应状态等筛选条件避免误操作。
- 处理原MeetingItem时,建议使用
GetAssociatedMeetingItem方法准确关联原邀请,确保对象未被释放。 - 需在不同版本的Outlook中测试,确保行为一致。
内容的提问来源于stack exchange,提问作者DomBat
相关产品推荐
相关产品推荐

