C#Outlook在电子邮件发送成功后删除事件?

时间:2018-05-27 12:59:11

标签: c# email events 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)。

我应该这样做吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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