Freigeben über


Weiterleiten von Anforderungen für Inhalte öffentlicher Ordner

Alle Anforderungen für Informationen zu öffentlichen Ordnern, die den Inhalt des öffentlichen Ordners betreffen, müssen an das Postfach für öffentliche Ordner weitergeleitet werden, das den Inhalt für den Zielordner enthält. Um die Anforderungen an dieses Postfach weiterzuleiten, müssen Sie die Header X-AnchorMailbox und X-PublicFolderMailbox auf bestimmte Werte festlegen.

Die folgende Tabelle enthält eine Übersicht über den Prozess:

Übersicht über öffentliche Ordner

Kopfzeile Was benötige ich? Gewusst wie bekommen?
X-AnchorMailbox
1. Die Werte X-AnchorMailbox und X-PublicFolderInformation für das Hierarchiepostfach für öffentliche Ordner.

2. Die GUID des Postfachs für öffentliche Ordner, das den Postfachinhalt enthält, der an den AutoErmittlungsdienst gesendet wird.

Die AutoDiscoverSMTPAddress in der AutoDisover-Antwort wird zum Wert des X-AnchorMailbox-Headers .
TODO
1. Verwenden Sie das Codebeispiel in diesem Artikel, das die verwaltete EWS-API implementiert. Alternativ können Sie EWS verwenden und Ihre Ergebnisse konvertieren, um eine GUID zu erhalten.

2. Stellen Sie eine AutoErmittlungsanforderung , indem Sie die GUID plus den Domänennamen verwenden.

3. Verwenden Sie den Wert des AutoDiscoverSMTPAddress-Elements , das in der AutoErmittlungsantwort zurückgegeben wird, um den Wert der Header aufzufüllen.
X-PublicFolderMailbox
Ihre Arbeit ist erledigt, der X-PublicFolderMailbox-Wert entspricht dem X-AnchorMailbox-Wert!
Sie haben es bereits!

Nachdem Sie die Headerwerte ermittelt haben, schließen Sie sie bei Inhaltsanforderungen für öffentliche Ordner ein.

Die Schritte in diesem Artikel beziehen sich spezifisch auf Inhaltsanforderungen öffentlicher Ordner. Informationen zum Ermitteln, ob es sich bei Ihrer Anforderung um eine Hierarchie für öffentliche Ordner oder eine Inhaltsanforderung handelt, finden Sie unter Weiterleiten von Anforderungen für öffentliche Ordner.

Bestimmen der GUID des Postfachs für öffentliche Ordner mithilfe der verwalteten EWS-API

Verwenden Sie zum Bestimmen der GUID des Inhaltspostfachs für öffentliche Ordner das folgende Codebeispiel:

Der wert PR_REPLICA_LIST identifiziert die Postfach-GUID des Postfachs für öffentliche Ordner, das den Inhalt für den Ordner enthält. Die PR_REPLICA_LIST-Eigenschaft ist ein Bytearray, wird aber in eine GUID für dieses Szenario umgewandelt. Die GUID und der Domänenname werden verkettet, um die Adresse zu bilden, für die die AutoErmittlung aufgerufen werden soll.

In diesem Beispiel wird davon ausgegangen, dass service das ExchangeService-Objekt für den Postfachbenutzer ist und PFHAnchorHeaderPFHMailboxHeader die Werte der Header "X-AnchorMailbox " und " X-PublicFolderMailbox " sind. Domäne ist der vom Mandanten verwendete Domänenname.

public static string GetMailboxGuidAddress(ExchangeService service, String PFHAnchorHeader, String PFHMailboxHeader, String domain)
{
    // Create a new folder view, and pass in the maximum number of folders to return.
    FolderView view = new FolderView(10);
    // Create an extended property definition for the PR_REPLICA_LIST property.
    ExtendedPropertyDefinition PR_REPLICA_LIST = new ExtendedPropertyDefinition(0x6698, MapiPropertyType.Binary);
    // As a best practice, limit the properties returned to only those required.
    // In this case, return the folder ID, the folder display name, and 
    // the value of the PR_REPLICA_LIST extended property definition.
    view.PropertySet = new PropertySet(BasePropertySet.IdOnly, FolderSchema.DisplayName, PR_REPLICA_LIST);
    service.HttpHeaders.Add("X-AnchorMailbox", PFHAnchorHeader);
    service.HttpHeaders.Add("X-PublicFolderMailbox", PFHMailboxHeader);
    // Add a call to the CertificateValidationCallback method here if needed.
    // ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallBack;
    // Call FindFolders to retrieve the folder hierarchy, starting with the PublicFolderRoot folder.
    // This method call results in a FindFolder call to EWS.
    FindFoldersResults findResults = service.FindFolders(WellKnownFolderName.PublicFoldersRoot, view);
    string GuidAsString = null;
    List<string> Guids = new List<string>();
    // For each folder under the root, display the name, and copy the value of the 
    // PR_REPLICA_LIST byte array to a string value. 
    foreach (Folder folder in findResults.Folders)
    {
        Console.WriteLine("Public folder display name: {0}", folder.DisplayName);
        byte[] ByteArr = (byte[])folder.ExtendedProperties[0].Value;
        GuidAsString = System.Text.Encoding.ASCII.GetString(ByteArr, 0, 36);
        Guids.Add(GuidAsString);
        Console.WriteLine("Address for Autodiscover: {0}.{1}\r\n", GuidAsString, domain);
    }
    // Concatenate the GUID value of the PR_REPLICA_LIST with the domain name to generate the 
    // SMTP address to use for the AutoDiscover request for the public folder content mailbox.
    string AutoDSMTPAddress = GuidAsString + "@" + domain;
    // Check that all folders have the same GUID value. If they do not, use the GUID value of the
    // folder that you're requesting content for.
    string commonGuid = CompareGuidsForEquality(Guids);
    if (commonGuid == "Not Equal")
    {
        Console.WriteLine("The GUIDs for all the folders in the hierarchy are not the same. Run the Autodiscover sample using the address returned above that is associated with the folder in your hierarchy request.", AutoDSMTPAddress);
        return null;
    }
    else
    {
        Console.WriteLine("The GUIDs for all public folders in the hierarchy are the same. Run the Autodiscover sample using the {0} address.", AutoDSMTPAddress);
        return AutoDSMTPAddress;
    }
}
// Method to compare the GUID for each folder under the public folder root.
// If each GUID is the same, return the GUID.
// If the GUIDs are not the same, return "Not equal".
public static string CompareGuidsForEquality(List<string> list)
{
    string NotEqual = "Not equal";
    string first = list.First();
    return list.All(x => x == first) ? first : NotEqual;
}

Wenn Sie den Fehler "Fehler bei der Anforderung. Die zugrunde liegende Verbindung wurde geschlossen: Es konnte keine Vertrauensstellung für den sicheren SSL/TLS-Kanal hergestellt werden. Sie müssen eine Überprüfungsrückrufmethode aufrufen. Ein Platzhalter und ein Kommentar für diese Methode sind im Codebeispiel enthalten.

Wenn die Postfach-GUID für alle öffentlichen Ordner unter dem Stammverzeichnis des öffentlichen Ordners identisch ist, gibt das Beispiel die Adresse an, die beim Aufrufen der AutoErmittlung in der Konsolenausgabe und als Rückgabewert verwendet werden soll. Wenn die Postfach-GUID nicht für alle öffentlichen Ordner im Stammverzeichnis des öffentlichen Ordners identisch ist, müssen Sie eine AutoErmittlungsanforderung für die Adresse stellen, die dem Ordner in Ihrer Inhaltsanforderung zugeordnet ist.

Bestimmen der GUID des Postfachs für öffentliche Ordner mithilfe von EWS

Das folgende Codebeispiel zeigt, wie der Wert der eigenschaft PR_REPLICA_LIST (0x66980102) mithilfe des EWS FindFolder-Vorgangs abgerufen wird. Für das ExtendedFieldURI-Element wird das PropertyTag-Attribut auf den Dezimalwert (26264) der PR_REPLICA_LIST-Eigenschaft und das PropertyType-Attribut auf Binary festgelegt.

Dies ist auch die XML-Anforderung, die die verwaltete EWS-API sendet, wenn Sie die FindFolders-Methode verwenden, um die GUID des Postfachs für öffentliche Ordner mithilfe der verwalteten EWS-API zu bestimmen.

POST https://outlook.office365.com/EWS/Exchange.asmx HTTP/1.1
Content-Type: text/xml; charset=utf-8
Accept: text/xml
User-Agent: ExchangeServicesClient/15.00.0913.015
Accept-Encoding: gzip,deflate
Authorization: Basic c29ueWFmQGNvbnRvc28xMDAwLm9ubWljcm9zb2Z0LmNvbTpFWENIIzIwMTQ=
Host: outlook.office365.com
Cookie: ClientId=KZPBLKA9ZMPXAQDW
Content-Length: 1005
Expect: 100-continue
<?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>IdOnly</t:BaseShape>
        <t:AdditionalProperties>
          <t:FieldURI FieldURI="folder:DisplayName" />
          <t:ExtendedFieldURI PropertyTag="26264" PropertyType="Binary" />
        </t:AdditionalProperties>
      </m:FolderShape>
      <m:IndexedPageFolderView MaxEntriesReturned="10" Offset="0" BasePoint="Beginning" />
      <m:ParentFolderIds>
        <t:DistinguishedFolderId Id="publicfoldersroot" />
      </m:ParentFolderIds>
    </m:FindFolder>
  </soap:Body>
</soap:Envelope>

Der Server antwortet auf die FindFolder-Anforderung mit einer FindFolderResponse-Nachricht , die den Wert der PR_REPLICA_LIST erweiterten Eigenschaft enthält. Beachten Sie, dass der Wert der Eigenschaft in der EWS-Antwort als Zeichenfolgenformat eines Base64-codierten Bytearrays angezeigt wird. Einige Headerwerte in der Antwort werden aus Gründen der Lesbarkeit gekürzt.

<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15" MinorVersion="0" MajorBuildNumber="1019" MinorBuildNumber="15" Version="V2_17" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="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:FindFolderResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:FindFolderResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:RootFolder IndexedPagingOffset="2" TotalItemsInView="2" IncludesLastItemInRange="true">
            <t:Folders>
              <t:ContactsFolder>
                <t:FolderId Id="AAEuAAAAAADL8shaNEKnQYVvRbpoY9vDAQBGDloItRzyTrAt+XVzRr/YAABdofPkAAA=" ChangeKey="AwAAABYAAABGDloItRzyTrAt+XVzRr/YAABdo/2h"/>
                <t:DisplayName>My Public Contacts</t:DisplayName>
                <t:ExtendedProperty>
                  <t:ExtendedFieldURI PropertyTag="0x6698" PropertyType="Binary"/>
                  <t:Value>MWVjMmEyMzYtZWQ5My00Zjg4LWI5YzYtMzNlNjNmYTRhYTQ0AA==</t:Value>
                </t:ExtendedProperty>
              </t:ContactsFolder>
              <t:Folder>
                <t:FolderId Id="AQEuAAADy/LIWjRCp0GFb0W6aGPbwwEARg5aCLUc8k6wLfl1c0a/2AAAAxEAAAA=" ChangeKey="AQAAABYAAABGDloItRzyTrAt+XVzRr/YAABdo/W/"/>
                <t:DisplayName>SampleFolder</t:DisplayName>
                <t:ExtendedProperty>
                  <t:ExtendedFieldURI PropertyTag="0x6698" PropertyType="Binary"/>
                  <t:Value>MWVjMmEyMzYtZWQ5My00Zjg4LWI5YzYtMzNlNjNmYTRhYTQ0AA==</t:Value>
                </t:ExtendedProperty>
              </t:Folder>
            </t:Folders>
          </m:RootFolder>
        </m:FindFolderResponseMessage>
      </m:ResponseMessages>
    </m:FindFolderResponse>
  </s:Body>
</s:Envelope>

Um den Wert des im XML zurückgegebenen PR_REPLICA_LIST MWVjMmEyMzYtZWQ5My00Zjg4LWI5YzYtMzNlNnjNmyNmYThYTQ0AA== zu verwenden, muss der Wert in eine GUID in einem Format konvertiert werden, das dem Konvertieren des Werts im EwS Managed API-Codebeispiel ähnelt. Die GUID wird dann mit dem Domänennamen verkettet, um eine SMTP-Adresse zu erstellen, die in der AutoErmittlungsanforderung enthalten ist.

Erstellen einer AutoErmittlungsanforderung

Verwenden Sie die von der GetMailboxGuidAddress -Methode zurückgegebene Adresse, um die AutoErmittlung aufzurufen. Es wird empfohlen, dass Sie das Codebeispiel Exchange 2013: Abrufen von Benutzereinstellungen mit AutoErmittlung verwenden, um den AutoErmittlungsdienst aufzurufen, da es den AutoErmittlungsprozess für Sie optimiert. In diesem Codebeispiel werden die in der folgenden Tabelle aufgeführten Befehlszeilenargumente verwendet, um den POX-AutoErmittlungsdienst aufzurufen, um den AutoDiscoverSMTPAddress-Wert abzurufen, der der Postfach-GUID zugeordnet ist.

Argument Beschreibung
emailAddress
Die von der GetMailboxGuidAddress -Methode in Bestimmen der GUID des Postfachs für öffentliche Ordner zurückgegebene Adresse.
-skipSOAP
Gibt an, dass POX-AutoErmittlungsanforderungen erforderlich sind.
-auth authEmailAddress
Die E-Mail-Adresse des Postfachbenutzers, die für die Authentifizierung verwendet wird. Sie werden aufgefordert, das Kennwort des Postfachbenutzers einzugeben, wenn Sie das Beispiel ausführen.

Die Befehlszeilenargumente sollten beispielsweise wie folgt aussehen:

1ec2a236-ed93-4f88-b9c6-33e63fa4aa44@contoso.com -skipSOAP -auth sonyaf@contoso.com

Dabei 1ec2a236-ed93-4f88-b9c6-33e63fa4aa44@contoso.com ist die Adresse, die von der GetMailboxGuidAddress-Methode zurückgegeben wird, und sonyaf@contoso.com der Postfachbenutzer.

Wenn Sie das Beispiel Exchange 2013: Benutzereinstellungen mit AutoErmittlung abrufen ausführen, sollte die letzte AutoErmittlungsantwort erfolgreich sein und alle Benutzereinstellungen enthalten, die der Postfach-GUID zugeordnet sind. Speichern Sie die Benutzereinstellung AutoDiscoverSMTPAddress lokal, da Sie sie im nächsten Schritt verwenden werden.

Wenn Sie Exchange 2013: Abrufen von Benutzereinstellungen mit dem AutoErmittlungsbeispiel nicht verwenden möchten, können Sie alternativ die Benutzereinstellung AutoDiscoverSMTPAddress abrufen, indem Sie eine Liste von AutoErmittlungsendpunkten generieren und dann die folgende POX-AutoErmittlungsanforderung an jede URL senden, bis Sie eine erfolgreiche Antwort erhalten.

<?xml version="1.0" encoding="utf-8"?>
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006">
  <Request>
    <EMailAddress>1ec2a236-ed93-4f88-b9c6-33e63fa4aa44@contoso.com</EMailAddress>
    <AcceptableResponseSchema>https://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema>
  </Request>
</Autodiscover>

Weitere Informationen zum AutoErmittlungsprozess finden Sie unter AutoErmittlung für Exchange, Generieren einer Liste von AutoErmittlungsendpunkten und Abrufen von Benutzereinstellungen aus Exchange mithilfe der AutoErmittlung.

Festlegen der Werte der Header "X-AnchorMailbox" und "X-PublicFolderMailbox"

Legen Sie mithilfe des Werts für die AutoDiscoverSMTPAddress , die unter Erstellen einer AutoErmittlungsanforderung abgerufen wurde, die Werte der Header X-AnchorMailbox und X-PublicFolderMailbox in Ihrer Inhaltsanforderung für öffentliche Ordner fest.

Wenn Sie beispielsweise eine AutoDiscoverSMTPAddress von NewPublicFolder@contoso.comangeben, schließen Sie die folgenden Header ein, wenn Sie die folgenden Methoden oder Vorgänge aufrufen.

X-AnchorMailbox: NewPublicFolder@contoso.com
X-PublicFolderMailbox: NewPublicFolder@contoso.com

Öffentliche Ordneraufrufe, die die Header "X-AncorMailbox" und "X-PublicFolder" erfordern

EWS Managed API-Methoden EWS-Vorgänge
Item.Bind
Item.Update
Item.Copy
Item.Move
Item.Delete
Folder.Bind
Folder.FindItems
CreateItem
GetItem
UpdateItem
CopyItem
MoveItem
DeleteItem
GetFolder
FindItem

Um diese Header mithilfe der verwalteten EWS-API hinzuzufügen, verwenden Sie die HttpHeaders.Add-Methode .

service.HttpHeaders.Add("X-AnchorMailbox", "NewPublicFolder@contoso.com");
service.HttpHeaders.Add("X-PublicFolderMailbox", "NewPublicFolder@contoso.com");

Der folgende Code zeigt eine GetFolder-Anforderung , bei der der Header X-AnchorMailbox und X-PublicFolderMailbox auf die in den Beispielen in diesem Artikel abgerufenen Werte festgelegt sind.

POST https://outlook.office365.com/EWS/Exchange.asmx HTTP/1.1
Content-Type: text/xml; charset=utf-8
User-Agent: SoapSender1.0
X-AnchorMailbox: NewPublicFolder@contoso.com
X-PublicFolderMailbox: NewPublicFolder@contoso.com
Authorization: Basic c29ueWFmQGNvbnRvc28xMDAwLm9ubWljcm9zb2Z0LmNvbTpFWENIIzIwMTQ=
Host: outlook.office365.com
Content-Length: 688
Expect: 100-continue
<?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:GetFolder>
      <m:FolderShape>
        <t:BaseShape>AllProperties</t:BaseShape>
      </m:FolderShape>
      <m:FolderIds>
        <t:DistinguishedFolderId Id="publicfoldersroot" />
      </m:FolderIds>
    </m:GetFolder>
  </soap:Body>
</soap:Envelope>

Siehe auch