未在MS Outlook 2010中设置传入邮件属性

本文关键字:属性 设置 MS Outlook 2010 未在 | 更新日期: 2023-09-27 18:13:20

我正在使用下面的代码设置进入MS Outlook 2010收件箱的邮件的属性(将它们设置为"已读"answers"高度重要")-

 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;

当代码执行后一次只有一封邮件时(我可以看到邮件为Read和High Importance),但是当同时有三到四封邮件时,它将只设置一封邮件的属性,而不是所有三或四封邮件。

请建议。

未在MS Outlook 2010中设置传入邮件属性

记得在设置完任何属性后保存消息。最重要的是,你的代码使用了多个点表示法——对于每个"。",你会得到一个全新的COM对象,所以你最终会在一个不同于设置UnRead属性的对象上设置重要性属性。

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。事件,但仍然不要忘记保存消息

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

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;
}