【发布时间】: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