2014-02-14 34 views
4

我正嘗試使用Microsoft.Office.Interop.Outlook從Outlook收件箱中檢索電子郵件。這是我的代碼:爲什麼我不能使用interop outlook檢索所有MailItems?

Application app = new Application(); 
    NameSpace ns = app.Session; 
    MAPIFolder inbox = ns.GetDefaultFolder(OlDefaultFolders.olFolderInbox); 
    Items items = inbox.Items; 
    foreach (Microsoft.Office.Interop.Outlook.MailItem mail in items) 
     { 
      if (mail as MailItem != null) 
      { 
       Console.WriteLine(mail.Subject.ToString()); 
       Console.WriteLine(mail.Body.ToString()); 
       Console.ReadKey(); 
      } 
     } 

當我這樣做,它的作品 - 有點。它只顯示一封電子郵件。應該有三個。它顯示的電子郵件是那裏最古老的電子郵件...爲什麼我無法獲得全部三個電子郵件?除了MailItem之外,還有其他類型的郵件會在我的收件箱中嗎?

+0

如果您刪除mailItem的檢查,而是使用反射來檢索Class(或MessageClass)屬性,該怎麼辦? –

回答

6

我有同樣的確切問題 - 我的解決方法是創建一個List<MailItem>並通過該循環。確保電子郵件不在子文件夾中,否則將不會被發現。

Outlook.Application app = new Outlook.Application(); 
Outlook.NameSpace outlookNs = app.GetNamespace("MAPI"); 
Outlook.MAPIFolder emailFolder = outlookNs.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox); 

List<MailItem> ReceivedEmail = new List<MailItem>(); 
foreach (Outlook.MailItem mail in emailFolder.Items)    
     { ReceivedEmail.Add(mail); } 

foreach (MailItem mail in ReceivedEmail) 
{ 
    //do stuff 
} 
+0

這工作!謝謝! –

相關問題