【问题标题】:C#: Loop through unread email items in specific Outlook mailboxC#:循环遍历特定 Outlook 邮箱中的未读电子邮件项目
【发布时间】:2016-06-10 20:20:59
【问题描述】:

我对 Outlook 编程非常陌生。

我有一个邮箱,让我们在 Outlook 中输入“ImportantMail”。

我正在开发一个 Windows 窗体应用程序,它应该在该邮箱中找到所有未读电子邮件并循环访问它们以访问主题、发件人和内容。

有什么简单的方法可以实现吗?

我已经尝试过我找到的多个教程,但对于像我这样的新手来说太混乱了......

提前致谢!

【问题讨论】:

    标签: c# email outlook


    【解决方案1】:

    在我的情况下,我正在向后工作,因为我正在移动邮件,所以要完成这项工作,你需要反向进行,但是..这确实不是一件难解决的事情 - 我考虑了会议请求等。

    for (int t = objFolder.Items.Count; t >= 1; t--)
    {
        try
        {
            if (!(objFolder.Items[t] is MailItem)) continue;
            MailItem m = objFolder.Items[t];
            if (m.Unread) { do_stuff(); }
        }
        catch { }
    }
    

    【讨论】:

    • 永远不要遍历文件夹中的所有项目,这样效率极低。使用 Items.Find/FindNext 或 Items.Restrict
    • 使用多点表示法(objFolder.Items.Count 和 objFolder.Items[t],相当于 objFolder.Items.Item(t)))是另一个问题。
    • 在我的情况下,我实际上必须阅读所有邮件然后移动它们,所以这对我正在做的 ehat 来说是有效的。因此它在我的回答中。我没有声称它是最有效的,只是一种做事方式
    • 您上面的循环确实有未读属性的条件。对于典型的收件箱文件夹,它的计算结果为邮件总数的百分之一或更少。忽略文件夹中 99% 的邮件效率非常低。
    • 是的,但正如解释的那样,这实际上来自我的应用程序,并解释说你可以反向循环并移动项目,如果未读则添加。我的应用程序在处理时会移动东西,所以这从来没有一个问题
    【解决方案2】:

    如果 ImportantMail 邮箱已在当前配置文件中,请从 Application.Session.Stores 集合中检索该存储并调用 Store.GetDefaultFolder(olFolderInbox)。如果它是当前配置文件中尚未存在的 Exchange 委托存储,请调用 Application.Session.CreateRecipient,然后调用 Application.Session.GetSharedDefaultFolder(..., olFolderInbox)

    读取 MAPIFolder.Items 属性,然后将 Items.Find/FindNext 或 Items.Restrict 与 [Unread] = true 之类的查询一起使用。

    【讨论】:

      猜你喜欢
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      • 2018-01-02
      • 1970-01-01
      相关资源
      最近更新 更多