繁体   English   中英

Outlook外接程序如何检测何时删除电子邮件

[英]How can an outlook addin detect when an email is deleted

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

这时我的主要问题是,我需要检测何时删除邮件项目,以便删除关联的资源,尤其是从未发送过的资源。 之前的delete事件处理程序似乎是这样做的明显选择,但似乎没有被调用。

有人可以告诉我如何检测邮件被删除的时间吗? 我想我可能需要做的是检测何时将其从“已删除邮件”文件夹中删除并删除,而不是仅移至其他文件夹。

Outlook项目的BeforeDelete事件确实是您想要的。

 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事件添加到“已删除邮件”文件夹。

无法轻松捕获与邮件删除相关的任何内容。 BeforeDelete无法可靠地运行,并且当您的代码未运行时(例如,当用户从另一台计算机/电话/等中删除它时),该项目可能会被删除。

还请记住,所有MAPI事件都是异步的,因此,在获得事件时,该项目已不存在。 在MAPI级别上,文件夹内容表会引发TABLE_ROW_DELETED通知,但是由于该消息已经消失,因此您仅获得PR_INSTANCE_KEY属性的值。 仅当您已经知道特定邮件的PR_INSTANCE_KEY或文件夹中所有邮件的PR_INSTANCE_KEY列表时,此功能PR_INSTANCE_KEY用。 您可以在OutlookSpy中看到事件触发事件(单击IMAPIFolder按钮,转到GetContentsTable选项卡,查看窗口底部的日志)。 如果没有MAPI(C ++或Delphi)选项,则赎回将公开RDOItems ItemRemove事件,它将PR_INSTANCE_KEY作为参数传递。

Exchange Server下的另一个选项是增量更改同步 API。 同样,它是纯MAPI,需要C ++或Delphi。 兑换通过RDOFolderSynchronizer对象公开它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM