Freigeben über


Löschen von Anlagen mithilfe von EWS in Exchange

Erfahren Sie, wie Sie Anlagen mithilfe der verwalteten EWS-API oder EWS in Exchange aus Elementen löschen.

Sie haben eine Reihe von Optionen zum Löschen von Datei- und Elementanlagen aus Elementen mithilfe der EWS Managed API. Sie können alle Anlagen aus der Nachricht löschen, nach einem Dateinamen oder nach Position in der Sammlung löschen. Für jede dieser Optionen gibt es eine AttachmentCollection-Methode .

Im Gegensatz dazu ist bei EWS unabhängig davon, ob Sie alle Anlagen aus einem Element oder nur einem Element löschen, die Reihenfolge der Vorgänge identisch. Im Gegensatz zur verwalteten EWS-API enthält EWS keine separaten Vorgänge, die basierend auf dem Namen oder der Position im Anlagenarray gelöscht werden müssen.

Tabelle 1. Verwaltete EWS-API-Methoden und EWS-Vorgänge zum Löschen von Anlagen

Aufgabe EWS Managed API-Methode EWS-Vorgang
Alle Anlagen aus einem Element löschen.
Item.Bind, gefolgt von AttachmentCollection.Clear, gefolgt von EmailMessage.Update
GetItem gefolgt von DeleteAttachment
Löschen sie eine Anlage aus einem Element anhand des Namens.
Item.Bind, gefolgt von AttachmentCollection.Remove, gefolgt von EmailMessage.Update
GetItem gefolgt von DeleteAttachment
Löschen einer Anlage aus einem Element nach Position in der Auflistung.
Item.Bind, gefolgt von AttachmentCollection.RemoveAt, gefolgt von EmailMessage.Update
GetItem gefolgt von DeleteAttachment

Löschen aller Anlagen aus einer E-Mail mithilfe der verwalteten EWS-API

Im folgenden Codebeispiel wird gezeigt, wie Sie alle Anlagen aus einer E-Mail löschen:

  1. Verwenden der EmailMessage.Bind-Methode zum Binden an eine vorhandene E-Mail-Nachricht und Abrufen der Sammlung von Anlagen.

  2. Verwenden sie die AttachmentCollection.Clear-Methode , um alle Anlagen aus der E-Mail zu löschen.

  3. Verwenden der EmailMessage.Update-Methode zum Speichern der Änderungen.

In diesem Beispiel wird davon ausgegangen, dass service ein gültiges ExchangeService-Objekt ist, itemId die ItemId der Nachricht ist, aus der Anlagen gelöscht werden, und dass der Benutzer bei einem Exchange-Server authentifiziert wurde.

public static void DeleteAllAttachments(ExchangeService service, ItemId itemId)
{
    // Bind to an existing message by using its item ID and requesting its attachments collection.
    // This method results in a GetItem call to EWS.
    EmailMessage message = EmailMessage.Bind(service, itemId, new PropertySet(ItemSchema.Attachments));
    // Delete all attachments from the message.
    message.Attachments.Clear();
    // Save the updated message.
    // This method results in an DeleteAttachment call to EWS.
    message.Update(ConflictResolutionMode.AlwaysOverwrite);
}

Löschen einer Anlage anhand des Namens aus einer E-Mail mithilfe der verwalteten EWS-API

Im folgenden Codebeispiel wird gezeigt, wie eine Anlage anhand des Namens gelöscht wird:

  1. Verwenden der EmailMessage.Bind-Methode zum Binden an eine vorhandene E-Mail-Nachricht und Abrufen der Sammlung von Anlagen.

  2. Verwenden der AttachmentCollection.Remove-Methode zum Löschen einer Anlage mit dem Namen FileAttachment.txt.

  3. Verwenden der EmailMessage.Update-Methode zum Speichern der Änderungen.

In diesem Beispiel wird davon ausgegangen, dass service ein gültiges ExchangeService-Objekt ist, itemId die ItemId der Nachricht ist, aus der die Anlage gelöscht wird, und dass der Benutzer bei einem Exchange-Server authentifiziert wurde.

public static void DeleteNamedAttachments(ExchangeService service, ItemId itemId)
{
    // Bind to an existing message by using its item ID and requesting its attachments collection.
    // This method results in a GetItem call to EWS.
    EmailMessage message = EmailMessage.Bind(service, itemId, new PropertySet(ItemSchema.Attachments));
    // Iterate through the attachments collection and delete the attachment named "FileAttachment.txt," if it exists.
    foreach (Attachment attachment in message.Attachments)
    {
        if (attachment.Name == "FileAttachment.txt")
        {
            message.Attachments.Remove(attachment);
            break;
        }
    }
    // Save the updated message.
    // This method results in an DeleteAttachment call to EWS.
    message.Update(ConflictResolutionMode.AlwaysOverwrite);
}

Löschen von Anlagen nach Position mithilfe der verwalteten EWS-API

Das folgende Codebeispiel zeigt, wie eine Anlage nach Position gelöscht wird:

  1. Verwenden der EmailMessage.Bind-Methode zum Binden an eine vorhandene E-Mail-Nachricht und Abrufen der Auflistung von Attachments und der EmailMessage.HasAttachments-Eigenschaft .

  2. Verwenden der AttachmentCollection.Remove-Methode zum Löschen der ersten Anlage in der Auflistung.

  3. Verwenden der EmailMessage.Update-Methode zum Speichern der Änderungen.

In diesem Beispiel wird davon ausgegangen, dass service ein gültiges ExchangeService-Objekt ist, itemId die ItemId der Nachricht ist, aus der die Anlage gelöscht wird, und dass der Benutzer bei einem Exchange-Server authentifiziert wurde.

public static void DeleteAttachmentByPosition(ExchangeService service, ItemId itemId)
{
    // Bind to an existing message by using its item ID and requesting the HasAttachments property and the attachments collection.
    // This method results in a GetItem call to EWS.
    EmailMessage message = EmailMessage.Bind(service, itemId, new PropertySet(EmailMessageSchema.HasAttachments, ItemSchema.Attachments));
    // Remove attachments using the zero-based index position of the attachment in the attachments collection.
    if (message.HasAttachments)
    {
        message.Attachments.RemoveAt(0);
    }
    // Save the updated message.
    // This method results in an DeleteAttachment call to EWS.
    message.Update(ConflictResolutionMode.AlwaysOverwrite);
}

Löschen von Anlagen aus einem Element mithilfe von EWS

Um Anlagen mithilfe von EWS zu löschen, müssen Sie zuerst die Nachricht und die Anlagenauflistung abrufen, um die AttachmentId (GetAttachment und DeleteAttachment) der zu löschenden Anlage zu bestimmen. Nachdem Sie einen oder mehrere AttachmentId-Werte zu löschen haben, rufen Sie den DeleteAttachment-Vorgang auf, um die angegebenen Anlagen aus der Nachricht zu entfernen.

Im folgenden Codebeispiel wird veranschaulicht, wie der GetItem-Vorgang zum Abrufen einer E-Mail und der Anlagenauflistung in der Nachricht verwendet wird. Dies ist auch die erste XML-Anforderung, die die verwaltete EWS-API sendet, wenn Sie die verwaltete EWS-API verwenden, um alle Anlagen aus einer E-Mail zu löschen. Die Werte einiger Attribute 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="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
    <t:TimeZoneContext>
      <t:TimeZoneDefinition Id="Central Standard Time" />
    </t:TimeZoneContext>
  </soap:Header>
  <soap:Body>
    <m:GetItem>
      <m:ItemShape>
        <t:BaseShape>IdOnly</t:BaseShape>
        <t:AdditionalProperties>
          <t:FieldURI FieldURI="item:Attachments" />
        </t:AdditionalProperties>
      </m:ItemShape>
      <m:ItemIds>
        <t:ItemId Id="uqE1AAA=" />
      </m:ItemIds>
    </m:GetItem>
  </soap:Body>
</soap:Envelope>

Der Server antwortet auf die GetItem-Anforderung mit einer GetItemResponse-Nachricht, die einen ResponseCode-Wert NoError umfasst, der angibt, dass die E-Mail erfolgreich abgerufen wurde, sowie AttachmentId-Werte der vorhandenen Anlagen.

<?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="939"
                         MinorBuildNumber="12"
                         Version="V2_11"
                         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:ItemId Id="uqE1AAA="
                        ChangeKey="CQAAABYAAAAFI5DJmZv+TLtyLOLIF1S5AAAXulcd" />
              <t:Attachments>
                <t:FileAttachment>
                  <t:AttachmentId Id="IpHLObE=" />
                  <t:Name>FileAttachment.txt</t:Name>
                </t:FileAttachment>
                <t:FileAttachment>
                  <t:AttachmentId Id="QuHSSmY=" />
                  <t:Name>SecondAttachment.txt</t:Name>
                </t:FileAttachment>
                <t:FileAttachment>
                  <t:AttachmentId Id="qf2KoPo=" />
                  <t:Name>ThirdAttachment.jpg</t:Name>
                </t:FileAttachment>
                <t:FileAttachment>
                  <t:AttachmentId Id="NFQMnMc=" />
                  <t:Name>FourthAttachment.txt</t:Name>
                </t:FileAttachment>
                <t:ItemAttachment>
                  <t:AttachmentId Id="jJvbLXQ=" />
                  <t:Name>Attached Message Item</t:Name>
                </t:ItemAttachment>
              </t:Attachments>
            </t:Message>
          </m:Items>
        </m:GetItemResponseMessage>
      </m:ResponseMessages>
    </m:GetItemResponse>
  </s:Body>
</s:Envelope>

Nachdem Sie bestimmt haben, welche Anlage gelöscht werden soll, rufen Sie den DeleteAttachment-Vorgang auf, und fügen Sie die AttachmentId-Werte der zu löschenden Anlagen ein.

<?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="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
    <t:TimeZoneContext>
      <t:TimeZoneDefinition Id="Central Standard Time" />
    </t:TimeZoneContext>
  </soap:Header>
  <soap:Body>
    <m:DeleteAttachment>
      <m:AttachmentIds>
        <t:AttachmentId Id="IpHLObE=" />
        <t:AttachmentId Id="QuHSSmY=" />
        <t:AttachmentId Id="qf2KoPo=" />
        <t:AttachmentId Id="NFQMnMc=" />
        <t:AttachmentId Id="jJvbLXQ=" />
      </m:AttachmentIds>
    </m:DeleteAttachment>
  </soap:Body>
</soap:Envelope>

Der Server antwortet auf die DeleteAttachment-Anforderung mit einer DeleteAttachmentResponse-Nachricht , die den ResponseCode-WertNoError für jede DeleteAttachmentResponseMessage enthält, was angibt, dass jede Anlage erfolgreich gelöscht wurde. Die Werte einiger Attribute wurden zur besseren 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="939"
                         MinorBuildNumber="12"
                         Version="V2_11"
                         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:DeleteAttachmentResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
                                xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:DeleteAttachmentResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:RootItemId RootItemId="uqE1AAA=" RootItemChangeKey="AAAXulck" />
        </m:DeleteAttachmentResponseMessage>
        <m:DeleteAttachmentResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:RootItemId RootItemId="uqE1AAA=" RootItemChangeKey="AAAXulck" />
        </m:DeleteAttachmentResponseMessage>
        <m:DeleteAttachmentResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:RootItemId RootItemId="uqE1AAA=" RootItemChangeKey="AAAXulck" />
        </m:DeleteAttachmentResponseMessage>
        <m:DeleteAttachmentResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:RootItemId RootItemId="uqE1AAA=" RootItemChangeKey="AAAXulck" />
        </m:DeleteAttachmentResponseMessage>
        <m:DeleteAttachmentResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:RootItemId RootItemId="uqE1AAA=" RootItemChangeKey="AAAXulck" />
        </m:DeleteAttachmentResponseMessage>
      </m:ResponseMessages>
    </m:DeleteAttachmentResponse>
  </s:Body>
</s:Envelope>

Siehe auch