Partager via


Supprimer des pièces jointes à l'aide de EWS dans Exchange

Découvrez comment supprimer des pièces jointes d’éléments à l’aide de l’API managée EWS ou EWS dans Exchange.

Vous disposez d’un certain nombre d’options lorsqu’il s’agit de supprimer des pièces jointes de fichiers et d’éléments d’éléments à l’aide de l’API managée EWS. Vous pouvez supprimer toutes les pièces jointes du message, supprimer par un nom de fichier ou supprimer par position dans la collection. Pour chacune de ces options, il existe une méthode AttachmentCollection .

À l’inverse, avec EWS, que vous supprimiez toutes les pièces jointes d’un élément ou d’un seul élément, la séquence d’opérations est la même. Contrairement à l’API managée EWS, EWS n’inclut pas d’opérations distinctes à supprimer en fonction du nom ou de la position dans le tableau des pièces jointes.

Tableau 1. Méthodes d’API managée EWS et opérations EWS pour supprimer des pièces jointes

Tâche Méthode d'API managée EWS Opération EWS
Supprimer toutes les pièces jointes d’un élément.
Item.Bind, suivi de AttachmentCollection.Clear, suivi de EmailMessage.Update
GetItem suivi de DeleteAttachment
Supprimer une pièce jointe d’un élément par nom.
Item.Bind, suivi de AttachmentCollection.Remove, suivi de EmailMessage.Update
GetItem suivi de DeleteAttachment
Supprimer une pièce jointe d’un élément par position dans la collection.
Item.Bind, suivi de AttachmentCollection.RemoveAt, suivi de EmailMessage.Update
GetItem suivi de DeleteAttachment

Supprimer toutes les pièces jointes d’un e-mail à l’aide de l’API managée EWS

L’exemple de code suivant montre comment supprimer toutes les pièces jointes d’un e-mail par :

  1. Utilisation de la méthode EmailMessage.Bind pour établir une liaison à un message électronique existant et récupérer la collection de pièces jointes.

  2. Utilisation de la méthode AttachmentCollection.Clear pour supprimer toutes les pièces jointes de l’e-mail.

  3. Utilisation de la méthode EmailMessage.Update pour enregistrer les modifications.

Cet exemple suppose que le service est un objet ExchangeService valide, que itemId est l’ItemId du message à partir duquel les pièces jointes seront supprimées et que l’utilisateur a été authentifié auprès d’un serveur Exchange.

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);
}

Supprimer une pièce jointe par nom d’un e-mail à l’aide de l’API managée EWS

L’exemple de code suivant montre comment supprimer une pièce jointe par son nom :

  1. Utilisation de la méthode EmailMessage.Bind pour établir une liaison à un message électronique existant et récupérer la collection de pièces jointes.

  2. Utilisation de la méthode AttachmentCollection.Remove pour supprimer une pièce jointe nommée FileAttachment.txt.

  3. Utilisation de la méthode EmailMessage.Update pour enregistrer les modifications.

Cet exemple suppose que le service est un objet ExchangeService valide, que itemId est l’ItemId du message à partir duquel la pièce jointe sera supprimée et que l’utilisateur a été authentifié auprès d’un serveur Exchange.

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);
}

Supprimer des pièces jointes par position à l’aide de l’API managée EWS

L’exemple de code suivant montre comment supprimer une pièce jointe par position :

  1. Utilisation de la méthode EmailMessage.Bind pour établir une liaison à un message électronique existant et récupérer la collection de pièces jointes et la propriété EmailMessage.HasAttachments .

  2. Utilisation de la méthode AttachmentCollection.Remove pour supprimer la première pièce jointe de la collection.

  3. Utilisation de la méthode EmailMessage.Update pour enregistrer les modifications.

Cet exemple suppose que le service est un objet ExchangeService valide, que itemId est l’ItemId du message à partir duquel la pièce jointe sera supprimée et que l’utilisateur a été authentifié auprès d’un serveur Exchange.

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);
}

Supprimer des pièces jointes d’un élément à l’aide d’EWS

Pour supprimer des pièces jointes à l’aide d’EWS, vous devez d’abord récupérer le message et la collection de pièces jointes afin de déterminer l’Id d’attachement (GetAttachment et DeleteAttachment) de la pièce jointe à supprimer. Une fois que vous avez une ou plusieurs valeurs AttachmentId à supprimer, appelez l’opération DeleteAttachment pour supprimer les pièces jointes spécifiées du message.

L'exemple de code suivant montre comment utiliser l'opération GetItem pour récupérer un message électronique et la collection de pièces jointes associée au message. Il s’agit également de la première requête XML envoyée par l’API managée EWS lorsque vous utilisez l’API managée EWS pour supprimer toutes les pièces jointes d’un e-mail. Les valeurs de certains attributs ont été raccourcies pour améliorer la lisibilité.

<?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>

Le serveur répond à la demande GetItem par un message GetItemResponseResponseCode renvoie la valeur NoError, ce qui indique que le message a bien été récupéré, et où apparaissent les valeurs AttachmentId des pièces jointes existantes.

<?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>

Après avoir déterminé la pièce jointe à supprimer, appelez l’opération DeleteAttachment et incluez les valeurs AttachmentId des pièces jointes à supprimer.

<?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>

Le serveur répond à la demande DeleteAttachment avec un message DeleteAttachmentResponse qui inclut la valeur ResponseCodeNoError pour chaque DeleteAttachmentResponseMessage, ce qui indique que chaque pièce jointe a été supprimée avec succès. Les valeurs de certains attributs ont été raccourcies pour améliorer la lisibilité.

<?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>

Voir aussi