首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >outlook插件如何检测电子邮件何时被删除

outlook插件如何检测电子邮件何时被删除
EN

Stack Overflow用户
提问于 2018-05-28 00:46:41
回答 2查看 770关注 0票数 2

我已经创建了一个处理附件的Outlook插件。当附件被添加到邮件项目中时,我正在处理它并添加一个包含有关该附件的信息的用户属性。我有一个item send事件处理程序,它在邮件发送之前执行附件的最终处理。

在这一点上,我的主要问题是,我需要检测邮件项何时被删除,以便我可以删除相关的资源,特别是如果它从未发送过。删除前事件处理程序似乎是最明显的选择,但似乎没有被调用。

谁能告诉我如何检测邮件项目何时被删除?我想我可能需要做的是检测它何时被从“已删除邮件”文件夹中删除,而不是仅仅被移动到另一个文件夹。

EN

回答 2

Stack Overflow用户

发布于 2018-05-28 01:03:59

Outlook的BeforeDelete事件就是你想要的。

代码语言:javascript
运行
AI代码解释
复制
 Public WithEvents myItem As Outlook.MailItem 

 Public Sub DeleteMail() 
   Const strCancelEvent = "Application-defined or object-defined error" 
   On Error GoTo ErrHandler 
   Set myItem = Application.ActiveInspector.CurrentItem 
   myItem.Delete 
 Exit Sub 

 ErrHandler: 
   MsgBox Err.Description 
   If Err.Description = strCancelEvent Then 
     MsgBox "The event was cancelled." 
   End If 
   'If you want to execute the next instruction 
   Resume Next 
  'Otherwise it will finish here 
 End Sub 

 Private Sub myItem_BeforeDelete(ByVal Item As Object, Cancel As Boolean) 
   'Prompts the user before deleting an item 
   Dim strPrompt As String 
   'Prompt the user for a response 
   strPrompt = "Are you sure you want to delete the item?" 
   If MsgBox(strPrompt, vbYesNo + vbQuestion) = vbNo Then 
     'Don't delete the item 
     Cancel = True 
   End If 
 End Sub

若要区分移动到“已删除邮件”文件夹和永久删除,可以向“已删除邮件”文件夹添加一个ItemAdd事件。

票数 0
EN

Stack Overflow用户

发布于 2018-05-28 03:19:57

没有办法轻松捕获与消息删除相关的任何内容。BeforeDelete不能可靠地工作,而且当你的代码没有运行时(例如,当用户从另一台计算机/手机/etc上删除它时),一个项目可能会被删除。

还要记住,所有的MAPI事件都是异步的,所以当你得到一个事件时,这个项目已经消失了。在MAPI级别上,folder contents表引发TABLE_ROW_DELETED通知,但是由于消息已经消失,您只能获得PR_INSTANCE_KEY属性的值。只有当您已经知道特定邮件的PR_INSTANCE_KEY,或者您有文件夹中所有邮件的PR_INSTANCE_KEY列表时,此功能才有用。您可以在OutlookSpy中看到事件触发(单击IMAPIFolder按钮,转到GetContentsTable选项卡,查看窗口底部的日志)。如果MAPI (C++或Delphi)不是一个选项,Redemption将公开RDOItems.ItemRemove事件,该事件将PR_INSTANCE_KEY作为参数传递。

Exchange Server下的另一个选项是Incremental Change Synchronization应用编程接口。同样,它是纯MAPI,需要C++或Delphi。赎回通过RDOFolderSynchronizer对象公开它。

唯一的通用选项是定期扫描文件夹中的邮件,并根据您自己的列表检查它们,以查看是否缺少任何项目。这可能是一个性能瓶颈,即使您通过使用Outlook.Table对象在一次调用中检索多个项的属性来优化它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50557819

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文