Exportieren von Elementen mithilfe von EWS in Exchange

Informationen zum Exportieren von Terminen, E-Mails, Kontakten, Aufgaben und anderen Elementen mithilfe der verwalteten EWS-API oder EWS in Exchange.

Sie können Elemente aus Exchange mithilfe der verwalteten EWS-API oder EWS auf unterschiedliche Weise exportieren. Die zu verwendende Option hängt von folgenden Faktoren ab:

  • Vom exportierten Elementtyp

  • Vom Genauigkeitsgrad, der zwischen dem Elementzustand in Exchange und dem exportierten Element beibehalten werden soll

  • Vom Format des exportierten Elements

  • Von Anforderungen an die Nachbearbeitung

  • Davon, ob das Element wieder zurück in Exchange importiert werden soll

In diesem Artikel wird gezeigt, wie die verschiedenen Optionen zum Exportieren von Elementen verwendet werden. Sie können eine beliebige Option für den Batch-Export von Elementen aus Exchange verwenden.

Exportieren eines Elements in ein benutzerdefiniertes Format

Sie können die Ergebnisse eines Item.Bind EWS Managed API-Methodenaufrufs verwenden oder die Ergebnisse eines GetItem EWS-Vorgangs in einem Format analysieren, das Ihren Anwendungsanforderungen entspricht. Verwenden Sie diese Option, wenn Sie Elemente exportieren, um sie in eine Datenbank, .csv Datei oder ein anderes Format oder System zu importieren. Sie können das Element sogar in Form des EWS-XML-Elements speichern, was nützlich sein kann, da viele Systeme über xml-Analysefunktionen verfügen. Es wird empfohlen, die Item.Bind-Methode oder den GetItem-Vorgang (ohne die Item.MimeContent-Eigenschaft ) zu verwenden, da Sie mit dieser Option steuern können, welche Eigenschaften exportiert werden.

Exportieren von Elementen mit vollständiger Genauigkeit

Wenn Sie Elemente mit vollständiger Genauigkeit exportieren möchten, können Sie den ExportItems-EWS-Vorgang verwenden. Durch den ExportItems-Vorgang werden die Elemente als Datenstrom exportiert. Dieser Datenstrom dient nicht zur Analyse, kann jedoch als Sicherung auf Elementebene verwendet werden, die dann zurück in ein Exchange-Postfach importiert werden kann. Sie können viele Elemente in eine ExportItems-Anforderung aufnehmen, wir empfehlen jedoch, nicht mehr als 100 Elemente in die einzelnen Aufrufe einzufügen. Da die verwaltete EWS-API den ExportItems-Vorgang nicht implementiert, müssen Sie zum Senden der Webanforderungen eine Routine schreiben, wenn sie die verwaltete EWS-API verwenden. Optional können Sie die Item.Bind-Methode verwenden, um Metadaten zu dem Element abzurufen, sodass Sie Informationen zu dem Datenstrom indizieren und speichern können.

Wir empfehlen Ihnen, zum Exportieren von Elementen den ExportItems-Vorgang zu verwenden, die Sie anschließend in ein Exchange-Postfach importieren möchten.

Im folgenden Beispiel wird aufgezeigt, wie Sie den ExportItems-Vorgang verwenden. In diesem Beispiel wird der Elementbezeichner zur besseren Lesbarkeit gekürzt.

<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
      xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
      xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2013"/>
  </soap:Header>
  <soap:Body>
    <m:ExportItems>
      <m:ItemIds>
        <t:ItemId Id="AAMkAGYzZjZmRiUsidkC+NAAAAY89GAAA="/>
      </m:ItemIds>
    </m:ExportItems>
  </soap:Body>
</soap:Envelope>

Der Server antwortet auf die ExportItems-Anforderung mit einem ExportItemsResponse-Element, das einen ResponseCode-Elementwert von NoError enthält, der angibt, dass das Element erfolgreich exportiert wurde. Die Antwort enthält außerdem die Element-ID des exportierten Elements und den Datenstrom, der die exportierten Inhalte enthält. Im folgenden Beispiel wird der SOAP-Text veranschaulicht, der das exportierte Element enthält.

<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <m:ExportItemsResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
                         xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
    <m:ResponseMessages>
      <m:ExportItemsResponseMessage ResponseClass="Success">
        <m:ResponseCode>NoError</m:ResponseCode>
        <m:ItemId Id="AAMkAGYzZjZmRiUsidkC+NAAAAY89GAAA=" ChangeKey="FwAAAA=="/>
        <m:Data>
          AQAAAAgAAAAAAAAALgBlAHgAdABlAHMAdAAuAG0AaQBjAHIAbwBzAG8AZgB0AC4A
          cgAyAEAAYQB1AGoAaQBuAGcALQBkAG8AbQAuAGUAeAB0AGUAcwB0AC4AbQBpAGMAcgBvAHMA
          bwBmAHQALgBjAG8AbQAAAAMAADkAAAAAAwD+DwYAAAADAARAAwACQAMADkA=
        </m:Data>
      </m:ExportItemsResponseMessage>
     </m:ResponseMessages>
  </m:ExportItemsResponse>
</s:Body>

Verwenden des MIME-Stroms zum Exportieren in gängige Dateiformate

Sie können die verwaltete Item.Bind-EWS-API-Methode oder den GetItem-EWS-Vorgang verwenden, um eine MIME-Darstellung eines Elements abzurufen. Da Exchange die MIME-Inhalte der einzelnen Elemente nicht speichert, muss es die Datenbank-Darstellung der einzelnen Elemente in den MIME-Strom konvertieren. Da diese Konvertierung sehr ressourcenintensiv ist, wird nicht empfohlen, den MIME-Strom für viele Elemente anzufordern. Beachten Sie außerdem, dass der MIME-Strom eine begrenzte Anzahl von Eigenschaften enthält; Sie müssen möglicherweise andere Optionen in Betracht ziehen, wenn die Eigenschaftengruppe nicht die erforderlichen Eigenschaften enthält.

Verwenden Sie zum Exportieren einer E-Mail in eine EML- und MHT-Datei die verwaltete EWS-API, indem Sie den MIME-Strom verwenden

Outlook und andere gängige E-Mail-Anwendungen können das EML-Dateiformat (.eml) öffnen. Das folgende Beispiel zeigt, wie Sie eine E-Mail mithilfe des MIME-Datenstroms exportieren und den MIME-Stream verwenden können, um eine EML- und eine MIME-HTML-Datei (.mht) zu erstellen. Viele Webbrowser unterstützen das MIME-HTML-Dateiformat. In diesem Beispiel wird davon ausgegangen, dass service ein gültiges ExchangeService-Objekt ist, und der Benutzer sich mit einem Exchange-Server authentifizieren kann.

private static void ExportMIMEEmail(ExchangeService service)
{
    Folder inbox = Folder.Bind(service, WellKnownFolderName.Inbox);
    ItemView view = new ItemView(1);
    view.PropertySet = new PropertySet(BasePropertySet.IdOnly);
    // This results in a FindItem call to EWS.
    FindItemsResults<Item> results = inbox.FindItems(view);
    foreach (var item in results)
    { 
        PropertySet props = new PropertySet(EmailMessageSchema.MimeContent);
        // This results in a GetItem call to EWS.
        var email = EmailMessage.Bind(service, item.Id, props);
                
        string emlFileName = @"C:\export\email.eml";
        string mhtFileName = @"C:\export\email.mht";
        // Save as .eml.
        using (FileStream fs = new FileStream(emlFileName, FileMode.Create, FileAccess.Write))
        {
            fs.Write(email.MimeContent.Content, 0, email.MimeContent.Content.Length);
        }
        // Save as .mht.
        using (FileStream fs = new FileStream(mhtFileName, FileMode.Create, FileAccess.Write))
        {
            fs.Write(email.MimeContent.Content, 0, email.MimeContent.Content.Length);
        }
    }
}

Verwenden der verwalteten EWS-API zum Exportieren eines Termins in eine iCal-Datei mithilfe des MIME-Stroms

Outlook und andere gängige Kalenderanwendungen können das iCal-Dateiformat (ICS) öffnen. Im folgenden Beispiel wird veranschaulicht, wie ein Termin mithilfe des MIME-Stroms exportiert, und der MIME-Strom zum Erstellen einer iCal-Datei verwendet werden kann. Beachten Sie, dass viele Eigenschaften nicht mit dem MIME-Strom exportiert werden, dazu gehören auch Teilnehmer und anhangsbezogene Eigenschaften. Sie können andere Eigenschaften aus EWS aufnehmen, indem Sie sie anfordern und in der iCal-Datei als private Erweiterungen speichern. Diese privaten Erweiterungen erhalten das Präfix „x-".

In diesem Beispiel wird davon ausgegangen, dass service ein gültiges ExchangeService-Objekt ist, und der Benutzer sich an einem Exchange-Server authentifizieren kann. In diesem Beispiel wird außerdem davon ausgegangen, dass Sie einen Termin mit dem Betreff „Finanzplanung 2015" im Kalender-Ordner besitzen.

private static void ExportMIMEAppointment(ExchangeService service)
{
    Folder inbox = Folder.Bind(service, WellKnownFolderName.Calendar);
    ItemView view = new ItemView(1);
    view.PropertySet = new PropertySet(BasePropertySet.IdOnly); 
    // This results in a FindItem call to EWS.
    FindItemsResults<Item> results = inbox.FindItems("subject:'2015 Financial Projections'", view);
    foreach (var item in results)
    {
        PropertySet props = new PropertySet(AppointmentSchema.MimeContent);
        // This results in a GetItem call to EWS.
        var email = Appointment.Bind(service, item.Id, props);
        string iCalFileName = @"C:\export\appointment.ics";
        // Save as .ics.
        using (FileStream fs = new FileStream(iCalFileName, FileMode.Create, FileAccess.Write))
        {
            fs.Write(email.MimeContent.Content, 0, email.MimeContent.Content.Length);
        }
    }
}

Verwenden der verwalteten EWS-API zum Exportieren eines Kontakts in eine vCard-Datei mithilfe des MIME-Stroms

Outlook und andere gängige Kontaktverwaltungsanwendungen können das vCard-Dateiformat (.vcf) öffnen. Im folgenden Beispiel wird gezeigt, wie Sie einen Kontakt mithilfe des MIME-Datenstroms exportieren und den MIME-Stream verwenden, um eine vCard zu erstellen. Sie können andere Eigenschaften aus EWS erfassen, indem Sie sie anfordern und im speichern. vCard als private Erweiterungen. Diesen Erweiterungen wird "x-" vorangestellt.

In diesem Beispiel wird davon ausgegangen, dass service ein gültiges ExchangeService-Objekt ist, und der Benutzer sich mit einem Exchange-Server authentifizieren kann.

private static void ExportMIMEContact(ExchangeService service)
{
    Folder inbox = Folder.Bind(service, WellKnownFolderName.Contacts);
    ItemView view = new ItemView(1);
    view.PropertySet = new PropertySet(BasePropertySet.IdOnly);
    // This results in a FindItem call to EWS.
    FindItemsResults<Item> results = inbox.FindItems(view);
    foreach (var item in results)
    {
        PropertySet props = new PropertySet(ContactSchema.MimeContent);
        // This results in a GetItem call to EWS.
        var email = Contact.Bind(service, item.Id, props);
        string vcfFileName = @"C:\export\contact.vcf";
        // Save as .vcf.
        using (FileStream fs = new FileStream(vcfFileName, FileMode.Create, FileAccess.Write))
        {
            fs.Write(email.MimeContent.Content, 0, email.MimeContent.Content.Length);
        }
    }
}

Hinweis

[!HINWEIS] Sie können vCard-Dateien nicht mithilfe der MimeContent -Eigenschaft importieren. Sie können Kontakte mithilfe der verwalteten Contact.Save-EWS-API-Methode oder dem CreateItem-EWS-Vorgang importieren.

Verwenden Sie EWS zum Exportieren eines beliebigen Elements mithilfe des MIME-Stroms

Verwenden Sie den GetItem-Vorgang zum Abrufen des MIME-Stroms eines Elements. In der folgenden GetItem-Anforderung wird veranschaulicht, wie der MIME-Inhalt eines Elements angefordert werden kann.

<?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" />
  </soap:Header>
  <soap:Body>
    <m:GetItem>
      <m:ItemShape>
        <t:BaseShape>IdOnly</t:BaseShape>
        <t:IncludeMimeContent>true</t:IncludeMimeContent>
      </m:ItemShape>
      <m:ItemIds>
        <t:ItemId Id="AAMkADEzYjJkLTYxMwB8GqYicWAAA=" ChangeKey="CQAAABzXv"/>
      </m:ItemIds>
    </m:GetItem>
  </soap:Body>
</soap:Envelope>

Im folgenden Beispiel wird die Antwort auf eine Anforderung zum Abrufen des MIME-Stroms veranschaulicht. Der MIME-Strom wurde zur besseren Lesbarkeit gekürzt.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15" 
                         MinorVersion="0" 
                         MajorBuildNumber="893" 
                         MinorBuildNumber="17" 
                         Version="V2_10" 
                         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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <m:GetItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
                       xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:GetItemResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:Items>
            <t:Message>
              <t:MimeContent CharacterSet="UTF-8">UmVjZ6IGZyb2b2suY29y5hMzgwZTA1YtDQo=</t:MimeContent>
              <t:ItemId Id="AAMkADEzYjJkLTYxMwB8GqYicWAAA=" ChangeKey="CQAAABzXv"/>
            </t:Message>
          </m:Items>
        </m:GetItemResponseMessage>
      </m:ResponseMessages>
    </m:GetItemResponse>
  </s:Body>
</s:Envelope>

Nach dem Exportieren von Elementen möchten Sie vielleicht Elemente in Exchange importieren.

Siehe auch