Importieren von Elementen mithilfe von EWS in Exchange

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

Viele Systeme enthalten Termine, E-Mails, Kontakte und Aufgaben, und Sie können diese Elemente auf verschiedene Arten in Exchange importieren. Das Importieren von Elementen in Exchange ist einfach, wenn Postfachbeziehungen für diese Elemente nicht verwaltet werden. Sie können die Verwaltete EWS-API-Methode Item.Save oder den EWS-Vorgang CreateItem verwenden, um die Elemente in einem Exchange-Postfach zu erstellen. Der einfache Ansatz unterstützt jedoch nicht alle Szenarien. Zum Beispiel:

  • Die Beziehung zwischen Organisatoren und Teilnehmer wird nicht beibehalten, wenn Sie Termine mit Teilnehmern (Besprechungen) importieren. Dies bedeutet, dass der Organisator der Besprechung, den Teilnehmern an der Besprechung erneut eine Einladung senden muss, damit die Beziehung zwischen den Organisator und den Teilnehmer wiederhergestellt wird. Wenn der Termin in den Kalender eines Teilnehmers importiert wurde, wird der Termin nicht mit dem Termin des Organisators verknüpft. Die Teilnehmer müssen die aktuellste Besprechungseinladung des Organisators akzeptieren, um die Beziehung zwischen Organisator und Teilnehmer wiederherzustellen.

  • Informationen zu den Teilnehmern werden nicht beibehalten, wenn zugewiesene Aufgaben importiert werden.

Alle Importoptionen können für den Stapelimport von Elementen in Exchange verwendet werden.

Verwenden der EWS Managed API oder von EWS-Elementtypen zum Import eines Elements

Sie können die EWS Managed API oder EWS zum Import von E-Mails, Kontakten, Terminen oder Aufgaben von anderen Systemen verwenden. Stellen Sie die Eigenschaften Ihres Quellformat abhängig vom importierten Element auf einen der folgenden Werte ein.

Tabelle 1. EWS Managed API-Objekte und EWS-Elemente

EWS Managed API-Objekt EWS-Element
EmailMessage
Message
Contact
Kontaktperson
Appointment
CalendarItem
Task
Aufgabe

Verwenden Sie die Verwaltete EWS-API-Methode Item.Save oder den EWS-Vorgang CreateItem , um den Import von Elementen durchzuführen. Wir empfehlen diesen Ansatz, wenn Sie Elemente aus anderen Systemen importieren, da Sie steuern können, welche Eigenschaften importiert werden. Weitere Informationen zum Festlegen von Eigenschaften für Elemente und zum anschließenden Speichern des Elements finden Sie unter Erstellen eines Elements mithilfe der verwalteten EWS-API oder Erstellen eines Elements mithilfe von EWS.

Importieren von Elementen mit voller Genauigkeit

Sie können den EWS-Vorgang UploadItems zum Hochladen eines Elements als Datenstrom verwenden. Diese Datenstromdarstellung eines Elements muss aus dem Ergebnis eines ExportItems-Vorgangsaufrufs kommen. Da der UploadItems -Vorgang in der EWS Managed API nicht verfügbar ist, müssen Sie eine Routine zum Versenden der Webanfragen schreiben.

Dies ist die einfachste Möglichkeit zum Importieren von Elementen, die von einem anderen Exchange-Server exportiert wurden.

Im folgenden Beispiel wurden die IDs und das Data-Element 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="https://schemas.xmlsoap.org/soap/envelope/"
      xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types"
      xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2013_SP1"/>
  </soap:Header>
  <soap:Body>
    <m:UploadItems>
      <m:Items>
        <t:Item CreateAction="CreateNew">
          <t:ParentFolderId  Id="AAMkADEzOTE7kV0AAA=" ChangeKey="AQAAAA=="/>
          <t:Data>AQAAAAgAAAAAAQAAAAADABZADQASDkANABMO</t:Data>
        </t:Item>
      </m:Items>
    </m:UploadItems>
  </soap:Body>
</soap:Envelope>

Der Server antwortet auf die UploadItems-Anforderung mit einem UploadItemsResponse-Element , das den ResponseCode-ElementwertNoError enthält, der angibt, dass das Element erfolgreich hochgeladen wurde. Die Antwort enthält auch die Element-ID des hochgeladenen Elements.

Verwenden des MIME-Streams zum Import aus gängigen Dateiformaten

EWS unterstützt den Import von EML und iCal-Dateien. Sie sollten den MIME-Inhalt sicherheitshalber testen, damit Sie sehen, wie der Exchange-MIME-Parser den Inhalt Ihres MIME-Streams verarbeitet. Obwohl die Verwendung eines MIME-Streams praktisch ist, empfiehlt sich üblicherweise das Verwenden der EWS Managed API oder von EWS-Elementtypen zum Import eines Elements. Hier finden Sie ein Beispiel für das Importieren einer vCard.

Verwenden der EWS Managed API zum Import einer E-Mail aus einer EML-Datei mithilfe eines MIME-Streams

Das folgende Beispiel zeigt, wie Sie die MimeContent-Eigenschaft mit dem Inhalt einer EML-Datei festlegen und die E-Mail anschließend in Ihr Postfach importieren können. Dieses Beispiel zeigt auch, wie Sie die erweiterte Eigenschaft PidTagMessageFlags (0x0E07) einer importierten E-Mail festlegen können, damit sie im Postfach nicht als Entwurf angezeigt wird. 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 UploadMIMEEmail(ExchangeService service)
{
    EmailMessage email = new EmailMessage(service);
    
    string emlFileName = @"C:\import\email.eml";
    using (FileStream fs = new FileStream(emlFileName, FileMode.Open, FileAccess.Read))
    {
        byte[] bytes = new byte[fs.Length];
        int numBytesToRead = (int)fs.Length;
        int numBytesRead = 0;
        while (numBytesToRead > 0)
        {
            int n = fs.Read(bytes, numBytesRead, numBytesToRead);
            if (n == 0)
                break;
            numBytesRead += n;
            numBytesToRead -= n;
        }
        // Set the contents of the .eml file to the MimeContent property.
        email.MimeContent = new MimeContent("UTF-8", bytes);
    }
    
    // Indicate that this email is not a draft. Otherwise, the email will appear as a 
    // draft to clients.
    ExtendedPropertyDefinition PR_MESSAGE_FLAGS_msgflag_read = new ExtendedPropertyDefinition(3591, MapiPropertyType.Integer);
    email.SetExtendedProperty(PR_MESSAGE_FLAGS_msgflag_read, 1);
    // This results in a CreateItem call to EWS. The email will be saved in the Inbox folder.
    email.Save(WellKnownFolderName.Inbox);
}

Verwenden der EWS Managed API zum Import eines Termins aus einer iCal-Datei mithilfe eines MIME-Streams

Sie können einfache Termine in Form von iCalendar-Dateien importieren, indem Sie den MIME-Stream verwenden. Sie können keine Besprechungen importieren, bei denen es sich um Termine mit Teilnehmern handelt, da die Beziehung zwischen Besprechungsorganisatoren und Teilnehmern als Teil des Exchange-Kalenderworkflows festgelegt werden muss. Teilnehmer können nicht im MIME-Stream erfasst werden.

Im folgenden Codebeispiel wird gezeigt, wie Sie eine einfache ICS-Datei in das Postfach eines Benutzers importieren können.

private static void UploadMIMEAppointment(ExchangeService service)
{
    Appointment appointment = new Appointment(service);
    string iCalFileName = @"C:\import\appointment.ics";
    using (FileStream fs = new FileStream(iCalFileName, FileMode.Open, FileAccess.Read))
    {
        byte[] bytes = new byte[fs.Length];
        int numBytesToRead = (int)fs.Length;
        int numBytesRead = 0;
        while (numBytesToRead > 0)
        {
            int n = fs.Read(bytes, numBytesRead, numBytesToRead);
            if (n == 0)
                break;
            numBytesRead += n;
            numBytesToRead -= n;
        }
        // Set the contents of the .ics file to the MimeContent property.
        appointment.MimeContent = new MimeContent("UTF-8", bytes);
    }
    // This results in a CreateItem call to EWS. 
    appointment.Save(WellKnownFolderName.Calendar);
}

Verwenden von EWS zum Import eines Elements mithilfe eines MIME-Streams

Sie können den CreateItem-Vorgang in EWS zum Import von EML- und iCal-Elementen mithilfe eines MIME-Streams verwenden.

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/"
               xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2013_SP1" />
    <t:MailboxCulture>en-US</t:MailboxCulture>
  </soap:Header>
  <soap:Body >
    <m:CreateItem>
      <m:SavedItemFolderId>
        <t:DistinguishedFolderId Id="inbox"/>
      </m:SavedItemFolderId> 
        <m:Items>
        <t:Message>
          <t:MimeContent CharacterSet="UTF-8">
            <!-- Insert MIME content here-->
          </t:MimeContent>
        </t:Message>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

Nächste Schritte

Nachdem Sie Elemente in ein Postfach importieren, möchten Sie möglicherweise eine der folgenden Aufgaben durchführen: Erstellen eines benutzerdefinierten Ordners zum Speichern der importierten Elemente bzw. Synchronisieren Ihrer Client- und Postfachserver-Elemente.

Siehe auch