首页 > 解决方案 > 成功发送电子邮件时的C# Outlook删除事件?

问题描述

我有一个插件前景,我在成功发送电子邮件时创建一个事件,此代码:

private Outlook.Items _items;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    Outlook.Application application = this.Application;
    _items = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items;
    _items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd);
}

然后,我有用户设置,如果用户没有选择,我想删除该事件(Items_ItemAdd)。

那我应该这样做吗?

标签: c#emaileventsoutlook

解决方案


好吧,跟踪Sent Items文件夹并不是一个好主意。Sent ItemsOutlook 允许通过跳过文件夹来删除已发送的项目。Outlook 项目的DeleteAfterSubmit属性是一个布尔值,如果邮件的副本在发送时未保存,则为 True,如果副本保存在“已发送邮件”文件夹中,则为 False。因此,如果用户或其他软件(如 VBA 宏或加载项)在发送电子邮件之前设置此属性,您将永远不会触发该事件。

更好的方法是处理应用程序的ItemSend事件,该事件在收件箱中收到新项目时触发。

对于 Microsoft Outlook 处理的每个收到的项目,此事件都会触发一次。该项目可以是几种不同的项目类型之一,例如MailItemMeetingItemSharingItem。该EntryIDsCollection字符串包含对应于该项目的条目 ID。请注意,此行为已与事件的早期版本不同,因为该事件EntryIDCollection包含自上次触发事件以来收件箱中收到的所有项目的逗号分隔条目 ID 列表。

NewMailEx当新邮件到达收件箱并且在客户端规则处理发生之前触发该事件。您可以使用EntryIDCollection数组中返回的条目 ID 来调用NameSpace.GetItemFromID方法并处理该项目。请谨慎使用此方法,以尽量减少对 Outlook 性能的影响。但是,根据客户端计算机上的设置,新邮件到达收件箱后,垃圾邮件过滤和将新邮件从收件箱移动到另一个文件夹的客户端规则等过程可能会异步发生。您不应假设在这些事件触发后,收件箱中的项目数量总是会增加一项。

NewMailEx事件处理程序中,您可能会询问用户是否在发送后处理电子邮件,如果不是,您可以简单地将DeleteAfterSubmit属性设置为 true。


推荐阅读