获取所有Outlook文件夹及其子文件夹列表

12

我一直在尝试找出如何获取所有Outlook文件夹的列表,但只能获取默认文件夹的列表(例如收件箱、发件箱、已发送邮件、已删除项目等)。如果我有个人或自定义文件夹怎么办?例如,如果我在Outlook中添加一个名为“收据”的文件夹,则此文件夹不会是默认文件夹,并且不会显示在“默认文件夹”下面。我该如何使用c#中的Microsoft.Office.Interop.Outlook访问此文件夹?

我正在尝试创建一种自动将某些新邮件从任何给定文件夹下载到电子表格的方法。我想如果我可以获取所有文件夹的列表,那么我就可以只从所选文件夹中获取邮件。

Outlook._Folders oFolders;          
Outlook.MAPIFolder oPublicFolder = olNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolder‌​Inbox).Parent;
foreach (Outlook.MAPIFolder Folder in oFolders) 

1
你的代码现在是什么样子,只获取了一些文件夹? - sarnold
好的,我试过发布我的代码,但我有限制。基本上,它归结为这个(版主能否编辑这个?):Microsoft.Office.Interop.Outlook._Folders oFolders; Microsoft.Office.Interop.Outlook.MAPIFolder oPublicFolder = olNS.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox).Parent;foreach (Microsoft.Office.Interop.Outlook.MAPIFolder Folder in oFolders) 这不是我的精确代码,只是我复制的一个压缩版本(抱歉)。 - mtlca401
2个回答

14

这应该打印出你的Outlook中的所有文件夹,包括公共文件夹。

foreach (MAPIFolder folder in olNS.Folders)
{
    GetFolders(folder);
}

public void GetFolders(MAPIFolder folder)
{
    if (folder.Folders.Count == 0)
    {
         Console.WriteLine(folder.FullFolderPath);
    }
    else
    {
         foreach (MAPIFolder subFolder in folder.Folders)
         {
              GetFolders(subFolder);
         }
    }
}

1
上述答案几乎是正确的。但如果一个文件夹包含子文件夹,则该文件夹不会显示。我建议将 WriteLine 代码放在 if 语句之前,这样它就会显示所有文件夹,包括包含子文件夹的文件夹。 - Edgar

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接