【问题标题】:Outlook.Store.GetDefaultFolder Outlook is creating strange folders in a new .pst fileOutlook.Store.GetDefaultFolder Outlook 在新的 .pst 文件中创建奇怪的文件夹
【发布时间】:2017-10-03 01:59:54
【问题描述】:

创建新的 .pst 文件后,仅使用新的 Outlook.Store(.pst) 创建 2 个文件夹。

示例 1:

关闭 Outlook 并重新打开后,会创建多个文件夹。 有些是标准文件夹,例如回收站、RSSFeed 等。但有些很奇怪,名字也很奇怪(带有奇怪的字符)。

示例 2:

当我调试 COM 插件的例程时,我发现在插件的“启动”事件中,有一个代码检查 Outlook.Store 的默认文件夹。

使用 Outlook.Store 对象的“GetDefaultFolder”方法。 Microsoft 推荐使用此方法来识别 Outlook.Store 的默认文件夹。

执行此方法时,根据参数,它会在 Outlook.Store 中创建文件夹。我创建了一个简单的 COM 插件来举例说明:

在启动活动中我这样做了:

        private StringBuilder sb = new StringBuilder("##Log##");

        //Startup
        Outlook.NameSpace ns = OutlookApp.Session;
        Outlook.Store lastStore = ns.Stores[1];//Just to get the new Store

        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderCalendar);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderConflicts);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderContacts);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderDeletedItems);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderDrafts);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderInbox);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderJournal);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderJunk);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderLocalFailures);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderManagedEmail);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderNotes);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderOutbox);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderRssFeeds);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderSentMail);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderServerFailures);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderSuggestedContacts);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderSyncIssues);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderTasks);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olFolderToDo);
        GetDefaultFolder(lastStore, Outlook.OlDefaultFolders.olPublicFoldersAllPublicFolders);

        System.Diagnostics.Debug.Write(sb.ToString());

        private void GetDefaultFolder(Outlook.Store newStore, Outlook.OlDefaultFolders olFolderKind)
    {
        Outlook.MAPIFolder rootFolder = null;

        rootFolder = newStore.GetRootFolder();
        sb.AppendLine($"qtd: {rootFolder.Folders.Count}");

        try
        {
            sb.AppendLine($"Folder kind: {olFolderKind.ToString()}");
            newStore.GetDefaultFolder(olFolderKind);
        }
        catch
        {
        }
        finally
        {
            sb.AppendLine($"qtd: {rootFolder.Folders.Count}");
            sb.AppendLine();
            sb.AppendLine();
            
            if (rootFolder != null)
                Marshal.ReleaseComObject(rootFolder);
        }
    }

我加载新的 .pst 文件 (Outlook.Store) 并获取所有默认文件夹。但在少数情况下会添加新文件夹。

这段代码的日志是:

日志

qtd: 1 文件夹种类:olFolderCalendar qtd: 2

qtd: 2 文件夹种类:olFolderConflicts qtd: 2

qtd: 2 文件夹种类:olFolderContacts qtd: 3

qtd: 3 文件夹种类:olFolderDeletedItems qtd: 3

qtd: 3 文件夹种类:olFolderDrafts qtd: 4

qtd:4 文件夹种类:olFolderInbox qtd: 4

qtd:4 文件夹种类:olFolderJournal qtd: 5

qtd:5 文件夹种类:olFolderJunk qtd: 6

qtd: 6 文件夹种类:olFolderLocalFailures qtd: 6

qtd: 6 文件夹种类:olFolderManagedEmail qtd: 6

qtd: 6 文件夹种类:olFolderNotes qtd: 7

qtd:7 文件夹种类:olFolderOutbox qtd: 8

qtd:8 文件夹种类:olFolderRssFeeds qtd: 9

qtd: 9 文件夹种类:olFolderSentMail qtd: 9

qtd: 9 文件夹类型:olFolderServerFailures qtd: 9

qtd: 9 文件夹种类:olFolderSuggestedContacts qtd: 9

qtd: 9 文件夹类型:olFolderSyncIssues qtd: 9

qtd: 9 文件夹种类:olFolderTasks qtd: 10

qtd:10 文件夹种类:olFolderToDo qtd: 10

qtd:10 文件夹种类:olPublicFoldersAllPublicFolders qtd: 10

问题

Outlook 创建的这个奇怪的文件夹是什么? 为什么 Outlook.Store.GetDefaultFolder 方法会创建文件夹? 是否可以使用另一种方法来返回与 GetDefaultFolder 相同的信息但不创建文件夹?

【问题讨论】:

    标签: c# com outlook-addin office-addins comaddin


    【解决方案1】:

    StoreNamespace 类的 GetDefaultFolder 方法不会也不应该在 Outlook 中创建文件夹。

    首先,我看到一个自定义加载项在 Outlook (DocSite) 中运行。在使用 OOM 创建任何测试之前,我建议禁用所有这些测试。

    我还看到在 Outlook 中配置了一个有趣的域名。是 IMAP 还是 Exchange 配置文件?如果是这样,我建议改为配置任何 SMTP 邮箱。

    是自定义商店提供商吗?

    【讨论】:

    • 找到原因了吗?它是自定义商店提供程序还是其他加载项?
    • 嗨 Eugene,我正在使用 Addin Express 开发 Docsite Addin。是的,创建文件夹的是 DocSite,我创建了另一个插件只是为了模拟事件。实际上,是“Store.GetDefaultFolder”方法创建了奇怪的文件夹。 1 个帐户是 Exchange,另一个是 SMTP / POP。新的 .pst 文件没有与我刚刚创建的帐户关联。您认为最好在 Addin Express 论坛中创建帖子吗?对不起我的英语不好。
    • 创建我刚刚做的“示例”商店:文件 -> 帐户设置 -> 数据文件 -> 添加。只创建了 2 个文件夹(Outlook 默认)。在我的插件中,在启动事件中,我有一些代码可以检查每个商店的默认文件夹。执行此方法时,在启动时,对于我的新商店,某些类型的文件夹会发生异常并创建一个 Strage 文件夹。我不知道为什么会这样。
    • 尝试在 Outlook 中创建一个简单的 SMTP 帐户,而无需在 Outlook 中注册和运行任何加载项。在这种情况下,您能否重现该问题?
    • 我按照你说的做了一些测试,答案是否定的。它不会发生。只是在没有关联电子邮件帐户的情况下创建了新的 Outlook.Store(新的 .pst 文件)。
    猜你喜欢
    • 2014-01-09
    • 2012-06-15
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    相关资源
    最近更新 更多