从 Outlook 获取 C# 中的未读电子邮件
本文关键字:电子邮件 Outlook 获取 | 更新日期: 2023-09-27 17:55:49
嗨,我需要获取未读电子邮件。最后几行是否正确,因为它在 0 时引发i
异常 - 数组索引超出边界。
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();
}
Microsoft.Office.Interop.Outlook.Items 集合的索引从 1 开始。(可能是由于交换对象的遗留 + VBA 影响)
因此,您需要从 1 开始计数器或使用 for each 循环。(你的结束索引检查也是错误的)
// 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();
}
尝试改用 foreach 循环
foreach (var item in oItems)
{
textEmail.Text += "'r'nSubject:" + item.Subject.ToString();
}
。