C# 如何确定Outlook文件夹是否为公用文件夹?

C# 如何确定Outlook文件夹是否为公用文件夹?,c#,.net,outlook,outlook-object-model,C#,.net,Outlook,Outlook Object Model,我需要一种方法来确定Outlook文件夹是否为公用文件夹。我怀疑Microsoft.Office.Interop.Outlook中存在允许我执行此操作的某些属性,但我找不到它。您需要的是Exchange Web服务,特别是FindFolder操作(有关某些MSDN说明,请参阅或) 尽管从外观上看,没有特定的属性可以识别文件夹是否是“公共的”,就像@RedDeckWins提到的那样 更新 如果没有明确要求您为此使用托管C#,则可以使用Powershell Exchange cmdlet(请查看此项

我需要一种方法来确定Outlook文件夹是否为公用文件夹。我怀疑Microsoft.Office.Interop.Outlook中存在允许我执行此操作的某些属性,但我找不到它。

您需要的是Exchange Web服务,特别是FindFolder操作(有关某些MSDN说明,请参阅或)

尽管从外观上看,没有特定的属性可以识别文件夹是否是“公共的”,就像@RedDeckWins提到的那样

更新

如果没有明确要求您为此使用托管C#,则可以使用Powershell Exchange cmdlet(请查看此项)。具体而言,此命令可能会有所帮助:

Get-PublicFolder -Recurse | Format-List Name
Powershell本身非常易于使用,但如果您的代码运行的服务器安装了Powershell,也可以从C#调用它(对于大多数现代设备来说,应该安装)


如果您仅限于C#,请查看此StackOverflow问题:

如果您可以访问与所述文件夹关联的
IMsgStore
界面(抱歉,不知道如何使用纯C#-我推荐)您可以查询
PR\u MDB\u提供程序
属性,查看它是否为
pbExchangeProviderPublicGuid

根据您对KG答案的评论更新


如果要筛选出主邮箱中的联系人,只需将其
存储ID
与默认收件箱文件夹的ID进行比较,或者干脆不从任何其他存储中枚举文件夹即可。

Outlook文件夹似乎没有“公共”属性,但它们有权限。这就是你想要的吗?公用文件夹是交换的东西。不确定Outlook OM是否允许您访问它。我确信EWS(Exchange Web Service)允许访问公用文件夹。我想枚举文件夹并提取联系人,但只提取本地联系人,而不是Exchange服务器上的联系人。奇怪的是,当我枚举联系人时,我找不到一个好方法来确定这些联系人是本地联系人还是远程联系人。请参阅我的更新。您是仅限于C#还是可以使用Powershell?Exchange附带的工具在这里可能会有很大帮助。@Greg:请参阅我答案的更新:如果您只想在主邮箱中找到联系人文件夹(而不是公共邮箱),只需比较它们的
StoreID
s,或者只需将搜索限制在本地存储即可。