缓存中没有out时,Outlook加载项不会触发

时间:2020-05-11 13:59:08

标签: c# outlook vsto

我想做的是在收到新电子邮件后执行一项操作。当我在Outlook中使用联机模式时,但在Outlook处于缓存模式时,则无法使用此功能。消息不会被移动。

我尝试过

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    outlookNameSpace = this.Application.GetNamespace("MAPI");
    inbox = outlookNameSpace.GetDefaultFolder(
            Microsoft.Office.Interop.Outlook.
            OlDefaultFolders.olFolderInbox);

    items = inbox.Items;
    items.ItemAdd +=
        new Outlook.ItemsEvents_ItemAddEventHandler(Quarantine);
}

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{

    //triggers when new email comes in
    this.Application.NewMail += new Microsoft.Office.Interop.Outlook.
ApplicationEvents_11_NewMailEventHandler
(Quarantine);

}

我也尝试过NewMailEx,但是即使Outlook使用联机模式也无法触发,所以我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

您需要处理NewMailEx事件,该事件针对Microsoft Outlook处理的每个收到的项目触发一次。该项目可以是几种不同的项目类型之一,例如MailItemMeetingItemSharingItemEntryIDsCollection字符串包含与该项目对应的条目ID。这是MSDN声明的内容:

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

将一个或多个项目添加到指定的集合时,将触发ItemAdd事件。一次将大量项目添加到文件夹时,此事件不会运行。

最后,ItemAddNewMailEx事件处理程序的签名是不同的。您不能使用相同的函数来处理它们。