Freigeben über


Verschieben und Kopieren von E-Mail-Nachrichten mithilfe von EWS in Exchange

Hier erhalten Sie Informationen zum Verschieben und Kopieren von E-Mail-Nachrichten mithilfe der verwalteten EWS-API oder von EWS in Exchange.

Sie können die verwaltete EWS-API oder EWS zum Verschieben und Kopieren von E-Mail-Nachrichten in einem Postfach verwenden.

Tabelle 1. Verwaltete EWS-API-Methoden und EWS-Operationen zum Verschieben und Kopieren von E-Mail-Nachrichten

Aufgabe EWS Managed API-Methode EWS-Vorgang
Verschieben einer E-Mail-Nachricht
EmailMessage.Move
MoveItem
Kopieren einer E-Mail-Nachricht
EmailMessage.Copy
CopyItem

Es ist wichtig zu beachten, dass beim Verschieben oder Kopieren einer E-Mail-Nachricht in einen anderen Ordner ein neues Element in dem neuen Ordner mit einer eindeutigen Element-ID erstellt wird, und die ursprüngliche Nachricht wird gelöscht. Wenn Sie eine E-Mail-Nachricht zwischen zwei Ordnern in demselben Postfach verschieben oder kopieren, wird das neue Element in der Antwort zurückgegeben, mit dem Sie Zugriff auf die neue Element-ID erhalten. Wenn Sie jedoch eine E-Mail zwischen zwei Postfächern oder zwischen einem Postfach und einem öffentlichen Ordner verschieben oder kopieren, wird das neue Element nicht in der Antwort zurückgegeben. Verwenden Sie für den Zugriff auf die verschobene Nachricht in dem Szenario die verwaltete EWS-API-FindItems-Methode oder EWS-FindItem-Operation, erstellen Sie eine erweiterte Eigenschaftsdefinition für die PidTagSearchKey-Eigenschaft (0x300B0102), oder erstellen Sie eine benutzerdefinierte erweiterte Eigenschaft, legen Sie sie fest und suchen Sie dann in dem neuen Ordner nach der benutzerdefinierten erweiterten Eigenschaft.

Das Löschen einer E-Mail-Nachricht unterscheidet sich vom Verschieben eines Elements in den Ordner „Gelöscht Elemente". Wenn Sie die verwaltete EWS-API-Item.Delete-Methode oder die EWS-DeleteItem-Operation verwenden, wird das in der Anfrage angegebene Element aus dem ursprünglichen Ordner verschoben und eine Kopie wird mit der neuen Element-ID im Ordner „Gelöschte Elemente" abgelegt. Anders als beim Verschieben oder Kopieren eines Elements wird das neue Element nicht in der Delete -Methode oder DeleteItem-Operationsantwort zurückgegeben. Die zum Löschen einer E-Mail mithilfe der verwalteten EWS-API oder EWS erforderlichen Schritte sind die gleichen wie beim Löschen eines generischen Elements aus dem Exchange-Speicher.

Verschieben einer E-Mail-Nachricht mithilfe der verwalteten EWS-API

Im folgenden Codebeispiel wird veranschaulicht, wie die EmailMessage.Move-Methode zum Verschieben einer vorhandenen E-Mail-Nachricht von einem in einen anderen Ordner verwendet werden kann.

In diesem Beispiel wird davon ausgegangen, dass service ein gültiges ExchangeService-Objekt ist, und dass ItemId die ID der zu verschiebenden oder kopierenden E-Mail-Nachricht ist.

// As a best practice, limit the properties returned by the Bind method to only those that are required.
PropertySet propSet = new PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.Subject, EmailMessageSchema.ParentFolderId);
// Bind to the existing item by using the ItemId.
// This method call results in a GetItem call to EWS.
EmailMessage beforeMessage = EmailMessage.Bind(service, ItemId, propSet);
// Move the specified mail to the JunkEmail folder and store the returned item.
Item item = beforeMessage.Move(WellKnownFolderName.JunkEmail);
// Check that the item was moved by binding to the moved email message 
// and retrieving the new ParentFolderId.
// This method call results in a GetItem call to EWS.
EmailMessage movedMessage = EmailMessage.Bind(service, item.Id, propSet);
Console.WriteLine("An email message with the subject '" + beforeMessage.Subject + "' has been moved from the '" + beforeMessage.ParentFolderId + "' folder to the '" + movedMessage.ParentFolderId + "' folder.");

Verschieben einer E-Mail-Nachricht mithilfe von EWS

Im folgenden Codebeispiel wird veranschaulicht, wie die MoveItem-Operation zum Verschieben einer E-Mail-Nachricht in den Junk-E-Mail-Ordner verwendet werden kann.

Dies ist auch die XML-Anforderung, die beim Aufrufen der Move-Methode an die verwaltete EWS-API gesendet wird. Die Werte einiger Attribute und Elemente wurden zur besseren Lesbarkeit gekürzt.

<?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:MoveItem>
      <m:ToFolderId>
        <t:DistinguishedFolderId Id="junkemail" />
      </m:ToFolderId>
      <m:ItemIds>
        <t:ItemId Id="AfwDoAAA="
                  ChangeKey="CQAAABYAAAApjGm7TnMWQ5TzjbhziLL0AAF25sM1" />
      </m:ItemIds>
    </m:MoveItem>
  </soap:Body>
</soap:Envelope>

Der Server antwortet auf die MoveItem-Anforderung mit einer MoveItemResponse-Nachricht, die einen ResponseCode-Wert NoError umfasst, der angibt, dass die E-Mail-Nachricht erfolgreich verschoben wurde. Die Antwort enthält außerdem die ItemId für die E-Mail-Nachricht in dem neuen Ordner, die zum Speichern relevant ist, da die ItemId im neuen Ordner anders lautet.

Kopieren einer E-Mail-Nachricht mithilfe der verwalteten EWS-API

Im folgenden Codebeispiel wird veranschaulicht, wie die EmailMessage.Copy-Methode zum Kopieren einer vorhandenen E-Mail-Nachricht aus einem in einen anderen Ordner verwendet werden kann.

In diesem Beispiel wird davon ausgegangen, dass service ein gültiges ExchangeService-Objekt, und ItemId die ID der zu kopierenden E-Mail-Nachricht ist. Die Werte einiger Parameter wurden zur besseren Lesbarkeit gekürzt.

// As a best practice, limit the properties returned by the Bind method to only those that are required.
PropertySet propSet = new PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.Subject, EmailMessageSchema.ParentFolderId);
// Bind to the existing item by using the ItemId.
// This method call results in a GetItem call to EWS.
EmailMessage originalMessage = EmailMessage.Bind(service, ItemId, propSet);
// Copy the orignal message into another folder in the mailbox and store the returned item.
Item item = originalMessage.Copy("epQ/3AAA=");
// Check that the item was copied by binding to the copied email message 
// and retrieving the new ParentFolderId.
// This method call results in a GetItem call to EWS.
EmailMessage copiedMessage = EmailMessage.Bind(service, item.Id, propSet);
Console.WriteLine("An email message with the subject '" + originalMessage.Subject + "' has been copied from the '" + originalMessage.ParentFolderId + "' folder to the '" + copiedMessage.ParentFolderId + "' folder.");

Kopieren einer E-Mail-Nachricht mithilfe von EWS

Im folgenden Codebeispiel wird veranschaulicht, wie die CopyItem-Operation zum Kopieren einer E-Mail-Nachricht in einen anderen Ordner desselben Postfachs verwendet werden kann, indem die ItemId der zu verschiebenden E-Mailnachricht gesendet und dabei der Zielordner im ToFolderId-Element angegeben wird.

Dies ist die XML-Anforderung, die beim Aufrufen der Copy-Methode von der verwalteten EWS-API gesendet wird. Die Werte einiger Attribute und Elemente wurden zur besseren Lesbarkeit gekürzt.

<?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:CopyItem>
      <m:ToFolderId>
        <t:FolderId Id="pQ/3AAA=" />
      </m:ToFolderId>
      <m:ItemIds>
        <t:ItemId Id="2TSeSAAA="
                  ChangeKey="CQAAABYAAAApjGm7TnMWQ5TzjbhziLL0AAF2d+3+" />
      </m:ItemIds>
    </m:CopyItem>
  </soap:Body>
</soap:Envelope>

Der Server antwortet auf die CopyItem-Anforderung mit einer CopyItemResponse-Nachricht, die einen ResponseCode-Wert NoError umfasst, der angibt, dass die E-Mail-Nachricht erfolgreich kopiert wurde. Die Antwort umfasst außerdem die ItemId für die E-Mail-Nachricht im neuen Ordner, die zum Speichern relevant ist, da die ItemId im neuen Ordner anders lautet.

Siehe auch