创建新的 .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 相同的信息但不创建文件夹?