要列举Outlook文件夹文件夹、Outlook

2023-09-04 00:59:01 作者:鸢尾情人

我在找一些code(C#或VB.NET preferred)通过所有文件夹循环在Outlook邮箱,并返回这些文件夹的名称。我不希望弹出Outlook文件夹对话框,而是从返回的文件夹名称在给定的Outlook邮箱内。

I'm looking for some code (C# or VB.NET preferred) to iterate through all folders in an Outlook mailbox and return the names of those folders. I'm not looking to pop up the Outlook folder dialog, but rather to return the folder names in a given mailbox from outside Outlook.

感谢

推荐答案

这其实是很容易使用 VSTO (Visual Studio中工具的Office)。首次使用VSTO创建Outlook 2007年加入。下面是我的一些实验code,这是否。

This is actually quite easy using VSTO (Visual Studio Tools for Office). First Use VSTO to create an Outlook 2007 add in. Here is some of my experimental code that does this.

   private void RecurseThroughFolders(Outlook.Folder theRootFolder, int depth)
    {
        if ( theRootFolder.DefaultItemType != Outlook.OlItemType.olMailItem ) {
            return;
        }

        Console.WriteLine("{0}", theRootFolder.FolderPath);

        foreach( Object item in theRootFolder.Items ) {
            if (item.GetType() == typeof( Outlook.MailItem )) {
                Outlook.MailItem mi = (Outlook.MailItem)item;
                if (mi.Categories.Length > 0) {
                    WriteLinePrefix(depth);
                    Console.WriteLine("  $ {0}", mi.Categories);
                }
            }
        }

        foreach (Outlook.Folder folder in theRootFolder.Folders) {
            RecurseThroughFolders(folder, depth + 1);
        }
    }

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    Outlook.Application olApp = new Outlook.Application();

    Console.WriteLine("Default Profile = {0}", olApp.DefaultProfileName);

    Console.WriteLine("Default Store = {0}", olApp.Session.DefaultStore.DisplayName);

    selectExplorers = this.Application.Explorers;
    selectExplorers.NewExplorer += new Outlook.ExplorersEvents_NewExplorerEventHandler( newExplorer_Event );

    Outlook.Folder theRootFolder  = (Outlook.Folder) olApp.Session.DefaultStore.GetRootFolder();
    RecurseThroughFolders( theRootFolder, 0 );
}