【发布时间】:2018-09-21 15:20:48
【问题描述】:
我找不到使用 SOAP api 正确列出所有公用文件夹邮箱和公用文件夹的任何解决方案。我发现只有 powershell 命令或 C# 方法。如果有人知道如何获取/列出所有公用文件夹,请提供解决方案。
【问题讨论】:
标签: outlook office365 exchangewebservices
我找不到使用 SOAP api 正确列出所有公用文件夹邮箱和公用文件夹的任何解决方案。我发现只有 powershell 命令或 C# 方法。如果有人知道如何获取/列出所有公用文件夹,请提供解决方案。
【问题讨论】:
标签: outlook office365 exchangewebservices
要枚举公共文件夹,您需要使用 FindFolder 操作,然后从根开始对每个文件夹级别进行浅遍历查询(因为您不能进行深度遍历),例如
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<soap:Body>
<FindFolder Traversal="Shallow" xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
<FolderShape>
<t:BaseShape>Default</t:BaseShape>
</FolderShape>
<ParentFolderIds>
<t:DistinguishedFolderId Id="publicfoldersroot"/>
</ParentFolderIds>
</FindFolder>
</soap:Body>
</soap:Envelope>
您无法使用 EWS 获取公用文件夹邮箱您应该在 Office365 上执行的操作是发现正确的 PublicFolder 邮箱以包含在路由标头中,因此您应该通读 https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-route-public-folder-hierarchy-requests 和 https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-route-public-folder-content-requests(它们都有 XML 示例用于您需要的电话)。
【讨论】:
首先,您需要使用 SOAP 确定 X-AnchorMailbox 标头的值,并发出 Autodiscover 请求以确定 X-PublicFolderInformation 值。
其次,使用FindFolder,然后从Root开始遍历每个文件夹级别的查询,例如:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2013_SP1" />
</soap:Header>
<soap:Body>
<m:FindFolder Traversal="Shallow">
<m:FolderShape>
<t:BaseShape>AllProperties</t:BaseShape>
</m:FolderShape>
<m:IndexedPageFolderView MaxEntriesReturned="1" Offset="0" BasePoint="Beginning" />
<m:Restriction>
<t:IsEqualTo>
<t:FieldURI FieldURI="folder:DisplayName" />
<t:FieldURIOrConstant>
<t:Constant Value="My Public Contacts" />
</t:FieldURIOrConstant>
</t:IsEqualTo>
</m:Restriction>
<m:ParentFolderIds>
<t:FolderId Id="AQEuAAADy/LIWjRCp0GFb0W6aGPbwwEARg5aCLUc8k6wLfl1c0a/2AAAAwIAAAA=" ChangeKey="AQAAABYAAABGDloItRzyTrAt+XVzRr/YAABdo/XB" />
</m:ParentFolderIds>
</m:FindFolder>
</soap:Body>
</soap:Envelope>
参考来源:
【讨论】: