【问题标题】:Outlook Inbox Folder Parent always returns 0 FoldersOutlook 收件箱文件夹父级始终返回 0 个文件夹
【发布时间】:2018-05-08 05:30:09
【问题描述】:

我的 office vsto 插件有问题。每当我尝试遍历所有电子邮件文件夹以获取他们的电子邮件时,我总是得到 0 个项目,我真的不知道为什么。这是我的代码:

var inbox = Globals.ThisAddIn.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);

if (inbox is Outlook.Folder)
{
    if (inbox.Parent is Outlook.Folder)
    {
        for (int i = (inbox.Parent as Outlook.Folder).Items.Count; i > 0; i--)
        {       
            if ((inbox.Parent as Outlook.Folder).Items[i] is Outlook.MailItem)
            {
                if (((inbox.Parent as Outlook.Folder).Items[i] as Outlook.MailItem).Subject.ToString() == "test")
                {

                }
            }
        }
    }
}

它通过了前两个检查,但是在循环中

(inbox.Parent as Outlook.Folder).Items.Count

始终返回 0,即使我的收件箱中有大量电子邮件。知道为什么会这样吗?

//

当我尝试使用 .Folders 而不是 .Items 访问它们时,会像这样更改循环,但保持其他所有内容不变:

for (int i = (inbox.Parent as Outlook.Folder).Folders.Count; i > 0; i--){}

,我得到一个例外:

(inbox.Parent as Outlook.Folder).Folders.Count = '(inbox.Parent as Outlook.Folder).Folders.Count' 引发了“System.NullReferenceException”类型的异常

只是为了澄清一下:目标是遍历每个文件夹,访问每个文件夹的第 i 个邮件,并检查其标题是否为“test”。我知道这个例子脱离上下文没有多大意义,所以让我们只关注带来麻烦的部分,即正确计算所有文件夹。

//

【问题讨论】:

  • 您似乎在计算收件箱父级...而不是收件箱
  • 哦,是的,因为我必须访问所有文件夹,而不仅仅是主收件箱。已编辑。
  • 对,但收件箱的父级通常确实没有任何项目......
  • 如果不通过收件箱父项,我如何访问所有文件夹?
  • 如果你使用Folders而不是Items来获取父级的子文件夹呢?

标签: c# outlook vsto mailitem


【解决方案1】:

我通过访问 olFolderInbox 然后找到它的父级来计算收件箱文件夹的数量,使一切变得过于复杂。虽然这样做可能是可行的,但也可以通过以下简单的一行更轻松地完成:

var foldersCount = Globals.ThisAddIn.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox).Folders.Count;

并通过遍历foldersCount并访问Folders[i]来访问特定文件夹。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 2017-03-15
    相关资源
    最近更新 更多