我可以使用以下 powershell 命令检索存储在特定公用文件夹邮箱中的公用文件夹:
Get-PublicFolder –GetChildren | Where { $ _.ContentMailboxName –eq “PFMailbox1” }
(但我不想使用远程 PowerShell)
我无法使用 EWS 执行此操作。
我的第一个想法是获取所有公用文件夹,然后根据公用文件夹邮箱对其进行排序。
但可能没有包含公用文件夹邮箱名称的扩展 MAPI 属性(类似于 ContentMailboxName powershell 属性)。
所以我尝试了这个:具有委托访问权限的 EWS
var mailbox = new Mailbox("PFMailbox1@MyDomain.local");
// PFMailbox1 is Public Folder mailbox with Pubclic folders
FolderId folderId = new FolderId(WellKnownFolderName.MsgFolderRoot, mailbox);
Folder rootfolder = Folder.Bind(service, folderId);
(WellKnownFolderName 属性也使用 .Root 和 PublicFolderRoot 进行了测试)
但我总是得到错误:
“请求失败。远程服务器返回错误:(503)服务器不可用。” 或“Microsoft.Exchange.WebServices.dll 中发生了“Microsoft.Exchange.WebServices.Data.ServiceResponseException”类型的未处理异常”
当我尝试模仿时
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, impUser);
// impUser=PFMailbox1@MyDomain.local
Folder rootfolder = Folder.Bind(service, WellKnownFolderName.MsgFolderRoot );
我得到错误:
“该帐户无权模拟所请求的用户。”
用户 Administrator 和 PFMailbox1 的所有邮箱权限都设置为完全访问权限。我正在使用最新的 Exchange2013 dll。
编辑1:
第二个问题是如何创建根公用文件夹并将其保存到所需的公用文件夹邮箱?
EWS 方法 Folder.Save(FolderId) 只有一个参数,如果我使用 FolderId = PublicFolderRoot -> 所有文件夹都将保存到 MasterHierarchy 公共文件夹邮箱(第一次创建的邮箱)中。
我知道的唯一解决方案是使用 Remote Power Shell 为每个公用文件夹邮箱创建第一级(根)文件夹。
New-PublicFolder "Folder1" -Mailbox "PFMailbox1"
New-PublicFolder "Folder2" -Mailbox "PFMailbox2"
然后在第二个(第三个,..)文件夹级别,我可以使用 Folder.Save(FolderID)。但是如何使用 EWS 做到这一点?