現在のユーザーの Outlook 受信トレイを検索するコンソール アプリケーションを作成しています。プログラムは、件名に基づいて各電子メールに対して特定のアクションを実行し、電子メールを 3 つのサブフォルダのうちの 1 つに移動します。これまでのところ、エラーをスローすることなく実行されています。問題は、受信トレイ内の一部の電子メールをスキップすることであり、これを行う理由の背後にあるロジックを見つけることができないようです. 受信した最初のメールをスキップする場合もあれば、最後のメールをスキップする場合もあれば、2 つ残して残りを移動する場合もあります。コードにブレークポイントを挿入し、各行をステップ実行しましたが、スキップされたメールは表示されません。メールが既読か未読かは問題ではないようです。プログラムを複数回実行すると、最終的にスキップされた電子メールが処理されます。何が原因でしょうか?
Microsoft.Office.Interop.Outlook.Application application = null;
if (Process.GetProcessesByName("OUTLOOK").Count() > 0)
{
application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
}
else
{
//outlook not open, do nothing
}
Microsoft.Office.Interop.Outlook.Items items = null;
Microsoft.Office.Interop.Outlook.NameSpace ns = null;
Microsoft.Office.Interop.Outlook.MAPIFolder inbox = null;
Microsoft.Office.Interop.Outlook.Application();
ns = application.Session;
inbox = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
items = inbox.Items;
try
{
foreach (Object receivedMail in items)
{
if (receivedMail is MailItem)
{
MailItem mail = receivedMail as MailItem;
string subject = mail.Subject.ToString().ToUpper();
switch (subject)
{
case "SUBJECT1":
DoStuff1(mail);
mail.Move(inbox.Folders["folder1"]);
break;
case "SUBJECT2":
DoStuff2(mail);
mail.Move(inbox.Folders["folder2"]);
break;
default:
mail.Move(inbox.Folders["folder3"]);
break;
}
}
}
Console.WriteLine("Complete");
Console.ReadLine();
}
catch (System.Runtime.InteropServices.COMException ex)
{
Console.WriteLine(ex.ToString());
Console.ReadLine();
}
catch (System.Exception ex)
{
Console.WriteLine(ex.ToString());
Console.ReadLine();
}