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;

これは、コードの実行後に一度に 1 つのメールしか受信されない場合 (メールが既読であり、重要度が高いことがわかります) は正常に機能しますが、一度に 3 つまたは 4 つのメールが受信されると、すべてではなく 1 つのメールのみのプロパティが設定されます。 3つか4つのメール。

提案してください。

4

2 に答える 2

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 に答える
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();

もう 1 つの問題は、Items コレクションの最後のアイテムが最新のアイテムであると想定していることです。これは一般的に正しくありません。クレモアが提案したように、Items.ItemAdd イベントを使用しますが、メッセージを保存することを忘れないでください。

于 2013-05-14T16:35:22.697 に答える