0

我正在使用以下代码设置将进入 MS Outlook 2010 收件箱的邮件的属性(用于将它们设为已读并具有高重要性) -

 Microsoft.Office.Interop.Outlook.Application myApp = new Microsoft.Office.Interop.Outlook.Application();
 Microsoft.Office.Interop.Outlook.NameSpace mapiNameSpace = myApp.GetNamespace("MAPI");
 Microsoft.Office.Interop.Outlook.MAPIFolder myInbox = mapiNameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);     

 int i = myInbox.Items.Count;
 ((Microsoft.Office.Interop.Outlook.MailItem)myInbox.Items[i]).UnRead = false;
 ((Microsoft.Office.Interop.Outlook.MailItem)myInbox.Items[i]).Importance = OlImportance.olImportanceHigh;

当代码执行后一次只有一封邮件(我可以将邮件视为已读且具有高重要性)时,这工作正常,但是当一次收到三到四封邮件时,它只设置一封邮件的属性而不是全部三四封邮件。

请建议。

4

2 回答 2

0

请记住在设置任何属性后保存消息。最重要的是,您的代码使用多个点表示法 - 对于每个“.”,您将返回一个全新的 COM 对象,因此您最终会在与用于设置 UnRead 属性的对象不同的对象上设置 Importance 属性。

int i = myInbox.Items.Count;
MailItem msg = (Microsoft.Office.Interop.Outlook.MailItem)myInbox.Items[i];
msg.UnRead = false;
msg.Importance = OlImportance.
msg.Save();

另一个问题是您假设 Items 集合中的最后一项是最新的。这通常不是真的。正如 cremor 建议的那样,使用 Items.ItemAdd 事件,但仍然不要忘记保存消息。

于 2013-05-14T16:35:22.697 回答
0

您可以使用文件夹属性的ItemAdd事件:Items

Items inboxItems = myInbox.Items;
inboxItems.ItemAdd += HandleItemAdded;

private void HandleItemAdded(object item)
{
    MailItem mail = item as MailItem;
    if (mail == null) { return; }
    mail.UnRead = false;
    mail.Importance = OlImportance.olImportanceHigh;
}
于 2013-05-14T08:18:35.280 回答