为什么我不能使用interop outlook检索所有MailItems?

时间:2014-02-14 21:37:40

标签: c# visual-studio outlook interop

我正在尝试使用Microsoft.Office.Interop.Outlook从我的Outlook收件箱中检索电子邮件。这是我的代码:

  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还有其他类型的邮件会在我的收件箱中吗?

1 个答案:

答案 0 :(得分: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
}