Partager via


Déplacer et copier des messages électroniques à l’aide d’EWS dans Exchange

Découvrez comment déplacer et copier des messages électroniques à l’aide de l’API managée EWS ou EWS dans Exchange.

Vous pouvez utiliser l’API managée EWS ou EWS pour déplacer et copier des messages électroniques dans une boîte aux lettres.

Tableau 1. Méthodes d’API managée EWS et opérations EWS pour déplacer et copier des messages électroniques

Tâche Méthode d'API managée EWS Opération EWS
Déplacer un e-mail
EmailMessage.Move
MoveItem
Copier un e-mail
EmailMessage.Copy
CopyItem

Il est important de noter que lorsque vous déplacez ou copiez un message électronique dans un autre dossier, un nouvel élément est créé dans le nouveau dossier avec un ID d’élément unique, et le message d’origine est supprimé. Si vous déplacez ou copiez un e-mail entre deux dossiers dans la même boîte aux lettres, le nouvel élément est retourné dans la réponse, ce qui vous donne accès à l’ID du nouvel élément. Toutefois, si vous déplacez ou copiez un message électronique entre deux boîtes aux lettres ou entre une boîte aux lettres et un dossier public, le nouvel élément n’est pas retourné dans la réponse. Pour accéder au message déplacé dans ce scénario, utilisez la méthode FindItems de l’API managée EWS ou l’opération FindItem EWS, créez une définition de propriété étendue pour la propriété PidTagSearchKey (0x300B0102), ou créez et définissez une propriété étendue personnalisée, puis recherchez la propriété étendue personnalisée dans le nouveau dossier.

La suppression d’un message électronique est différente du déplacement d’un élément vers le dossier Éléments supprimés. Si vous utilisez la méthode Item.Delete de l’API managée EWS ou l’opération EWS DeleteItem , l’élément spécifié dans la requête est supprimé du dossier d’origine et une copie est placée dans le dossier Éléments supprimés avec un nouvel ID d’élément. Contrairement au déplacement ou à la copie d’un élément, le nouvel élément n’est pas retourné dans la méthode Delete ni dans la réponse de l’opération DeleteItem . Les étapes impliquées dans la suppression d’un e-mail à l’aide de l’API managée EWS ou EWS sont les mêmes que celles de la suppression d’un élément générique de la banque Exchange.

Déplacer un e-mail à l’aide de l’API managée EWS

L’exemple de code suivant montre comment utiliser la méthode EmailMessage.Move pour déplacer un message électronique existant d’un dossier vers un autre.

Cet exemple suppose que le service est un objet ExchangeService valide et que ItemId est l’ID du message électronique à déplacer ou copier.

// 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.");

Déplacer un e-mail à l’aide d’EWS

L’exemple de code suivant montre comment utiliser l’opération MoveItem pour déplacer un e-mail vers le dossier Email indésirable.

Il s’agit également de la requête XML envoyée par l’API managée EWS lors de l’appel de la méthode Move . Les valeurs de certains attributs et éléments ont été raccourcies pour des raisons de 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="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>

Le serveur répond à la requête MoveItem avec un message MoveItemResponse qui inclut la valeur ResponseCodeNoError, ce qui indique que le message électronique a été déplacé avec succès. La réponse inclut également l’ItemId du message électronique dans le nouveau dossier, qui est important à stocker, car l’ItemId est différent dans le nouveau dossier.

Copier un e-mail à l’aide de l’API managée EWS

L’exemple de code suivant montre comment utiliser la méthode EmailMessage.Copy pour copier un message électronique existant d’un dossier vers un autre.

Cet exemple suppose que le service est un objet ExchangeService valide et que ItemId est l’ID du message électronique à copier. Les valeurs de certains paramètres ont été raccourcies pour plus de lisibilité.

// 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.");

Copier un message électronique à l’aide d’EWS

L’exemple de code suivant montre comment utiliser l’opération CopyItem pour copier un e-mail dans un autre dossier de la même boîte aux lettres en envoyant l’ItemId du message électronique à déplacer et en spécifiant le dossier de destination dans l’élément ToFolderId .

Il s’agit également de la requête XML envoyée par l’API managée EWS lors de l’appel de la méthode Copy . Les valeurs de certains attributs et éléments ont été raccourcies pour des raisons de 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="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>

Le serveur répond à la requête CopyItem avec un message CopyItemResponse qui inclut la valeur ResponseCodeNoError, ce qui indique que le message électronique a été copié avec succès. La réponse inclut également l’ItemId du message électronique dans le nouveau dossier, qui est important à stocker, car l’ItemId est différent dans le nouveau dossier.

Voir aussi