2014-04-01 49 views
0

喜獲得在C#中未讀郵件,我需要獲取未讀郵件。最後幾行是否正確,因爲它在i爲0時拋出異常 - 數組索引超出範圍。從Outlook

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

Microsoft.Office.Interop.Outlook.Items oItems = myInbox.Items.Restrict("[UnRead] = true"); 

for(int i = 0; i <= oItems.Count; i++) 
{ 
    Microsoft.Office.Interop.Outlook.MailItem oMsg = (Microsoft.Office.Interop.Outlook.MailItem)oItems[i]; 
    textEmail.Text += "\r\nSubject:" + oMsg.Subject.ToString(); 
} 
+0

'我<= oItems.Count'應該是'我

回答

1

嘗試使用foreach循環,而不是

foreach (var item in oItems) 
{ 
    textEmail.Text += "\r\nSubject:" + item.Subject.ToString(); 
} 

...

+0

爲「主題」並沒有擴展方法「主題」接受類型「對象」的第一個參數可以找到(是否缺少using指令或程序集引用?) – SAEED

2

的Microsoft.Office.Interop.Outlook.Items集合的指數開始從1(可能是由於遺留+ VBA交換對象)

的影響,因此,你需要無論是從1開始你的櫃檯或使用每個循環。 (也是你結束索引檢查是錯誤的)

// index starts from 1. 
for(int i = 1; i <= oItems.Count; i++) 
{ 
    Microsoft.Office.Interop.Outlook.MailItem oMsg = (Microsoft.Office.Interop.Outlook.MailItem)oItems[i]; 
    textEmail.Text += "\r\nSubject:" + oMsg.Subject.ToString(); 
} 

的另一種選擇是使用foreach循環比for循環稍慢,但幾乎同等適用於所有的實際目的。

// var doesn't work for these com based legacy object models. 
foreach(Microsoft.Office.Interop.Outlook.MailItem oMsg in oItems) 
{ 
    textEmail.Text += "\r\nSubject:" + oMsg.Subject.ToString(); 
} 
+0

由於拉賈 - 賓果 – SAEED