[outlook在缓存中时,Outlook加载项不会触发

问题描述 投票:0回答:1

我想做的是在收到新电子邮件后执行操作。当我在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使用联机模式也无法触发,所以我不知道该怎么做。

c# outlook vsto
1个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.