Outlook电子邮件分类

时间:2018-05-23 12:47:17

标签: c# outlook vsto office-interop outlook-addin

我正在使用Outlook Interop在电子邮件到达时对其进行阅读和分类。

这是我使用的事件:

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

稍后在Switch语句中我有这样的代码:

case "Subject":
    mail.Categories = "Category";
    mail.UnRead = false; break;
default:
    mail.Categories = "Attention needed";
    mail.UnRead = false;
    mail.Save();
    break;

问题在于,有时收件箱每秒收到5封电子邮件,只对第一封和最后一封电子邮件进行分类,而另一封只收到UnRead = false而没有分类。

我还有其他可以尝试的活动吗?

1 个答案:

答案 0 :(得分:0)

收到多个项目时,不会触发ItemAdd事件(通常,超过16个)。这是OOM发布的一种已知的。

相反,您需要订阅NewMailEx类的Application事件,该事件会在收件箱中收到新项目时触发。

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

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

您还可以找到以下文章: