如何使用管理员模拟通过EWS正确创建/更新公用文件夹?

时间:2018-09-26 10:06:22

标签: outlook office365 exchangewebservices

以防万一,如果我(通过WebUI)为该用户(以管理员为例)设置了适当的权限,则无法创建任何公用文件夹。

但是当我尝试更新公用文件夹的“ EffectiveRights”以向该用户添加权限级别时,我无法做到。我需要发送哪个请求来更新公用文件夹上的用户权限级别或在该公用文件夹上添加适当的“ EffectiveRights”?

请求示例:

POST outlook.office365.com/EWS/Exchange.asmx

Content-Type:text/xml; charset=utf-8
Accept:text/xml;       charset=utf-8

BODY

<?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" 
    xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
        <soap:Header>
        <t:RequestServerVersion Version="Exchange2013_SP1" />
            <t:ExchangeImpersonation>
                <t:ConnectingSID>
                    <t:PrimarySmtpAddress>test@test_test.onmicrosoft.com</t:PrimarySmtpAddress>
                </t:ConnectingSID>
            </t:ExchangeImpersonation>
        </soap:Header>
    <soap:Body>
    <UpdateFolder xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
                  xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <FolderChanges>
        <t:FolderChange>
          <t:DistinguishedFolderId Id="publicfoldersroot" />
          <t:Updates>
            <t:SetFolderField>
              <t:FieldURI FieldURI="folder:EffectiveRights"/>
              <t:Folder>
                <t:EffectiveRights>
                  <t:CreateAssociated>false</t:CreateAssociated>
                  <t:CreateContents>true</t:CreateContents>
                  <t:CreateHierarchy>false</t:CreateHierarchy>
                  <t:Delete>false</t:Delete>
                  <t:Modify>false</t:Modify>
                  <t:Read>true</t:Read>
                </t:EffectiveRights>
              </t:Folder>
            </t:SetFolderField>
          </t:Updates>
        </t:FolderChange>
      </FolderChanges>
    </UpdateFolder>
  </soap:Body>
  </soap:Envelope>   

,响应为:

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Header>
        <h:ServerVersionInfo MajorVersion="15" MinorVersion="20" MajorBuildNumber="1164" MinorBuildNumber="25" Version="V2018_01_08" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
    </s:Header>
    <s:Body>
        <m:UpdateFolderResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
            <m:ResponseMessages>
                <m:UpdateFolderResponseMessage ResponseClass="Error">
                    <m:MessageText>Set action is invalid for property.</m:MessageText>
                    <m:ResponseCode>ErrorInvalidPropertySet</m:ResponseCode>
                    <m:DescriptiveLinkKey>0</m:DescriptiveLinkKey>
                    <m:MessageXml>
                        <t:FieldURI FieldURI="folder:EffectiveRights"/>
                    </m:MessageXml>
                    <m:Folders/>
                </m:UpdateFolderResponseMessage>
            </m:ResponseMessages>
        </m:UpdateFolderResponse>
    </s:Body>
</s:Envelope>

另一个例子:

POST outlook.office365.com/EWS/Exchange.asmx

Content-Type:text/xml; charset=utf-8
Accept:text/xml;       charset=utf-8

BODY

<?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" />
            <t:ExchangeImpersonation>
                <t:ConnectingSID>
                    <t:PrimarySmtpAddress>test@test_test.onmicrosoft.com</t:PrimarySmtpAddress>
                </t:ConnectingSID>
            </t:ExchangeImpersonation>
  </soap:Header>
  <soap:Body>
    <m:UpdateFolder>
      <m:FolderChanges>
        <t:FolderChange>
          <t:FolderId Id="AAEuAAAAAAAaRHOQqmYRzZvIAKoAL8RaAwCOXNGsJPKoS5iTrqfBNvbzAACDSr4rAAA=" />
          <t:Updates>
            <t:SetFolderField>
              <t:FieldURI FieldURI="folder:PermissionSet" />
              <t:Folder>
                <t:PermissionSet>
                  <t:Permissions>
                    <t:Permission>
                      <t:UserId>
                        <t:PrimarySmtpAddress>test@test_test.onmicrosoft.com</t:PrimarySmtpAddress>
                      </t:UserId>
                      <t:PermissionLevel>Editor</t:PermissionLevel>
                    </t:Permission>
                  </t:Permissions>
                </t:PermissionSet>
              </t:Folder>
            </t:SetFolderField>
          </t:Updates>
        </t:FolderChange>
      </m:FolderChanges>
    </m:UpdateFolder>
  </soap:Body>
</soap:Envelope>

和响应:

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Header>
        <h:ServerVersionInfo MajorVersion="15" MinorVersion="20" MajorBuildNumber="1143" MinorBuildNumber="18" Version="V2018_01_08" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
    </s:Header>
    <s:Body>
        <m:UpdateFolderResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
            <m:ResponseMessages>
                <m:UpdateFolderResponseMessage ResponseClass="Error">
                    <m:MessageText>Access is denied. Check credentials and try again., Underlying MAPI stream threw exception</m:MessageText>
                    <m:ResponseCode>ErrorAccessDenied</m:ResponseCode>
                    <m:DescriptiveLinkKey>0</m:DescriptiveLinkKey>
                    <m:Folders/>
                </m:UpdateFolderResponseMessage>
            </m:ResponseMessages>
        </m:UpdateFolderResponse>
    </s:Body>
</s:Envelope>

1 个答案:

答案 0 :(得分:1)

由于您尝试在publicfoldersroot中创建文件夹,因此默认情况下,没有用户有权执行此操作(这是为了防止人们弄乱Public Folder根目录)。因此,如果您希望用户test@test_test.onmicrosoft.com,需要首先使用EAC或Add-PublicFolderclientPermissions授予他们在Root文件夹上执行此操作的权限。我建议您首先使用EAC在根目录中创建一个文件夹,然后获取代码以创建该文件夹的子文件夹,从开发的角度来看,当您需要删除所有内容并再次进行测试然后尝试清除时,这更易于清理每次都是整个根层次。

由于EffectiveRights是一个calculate属性,因此无法更新,因此只有您第二个示例可以工作,您只能做的是更新第二个请求正在执行的文件夹的基础DACL