Mover y copiar mensajes de correo electrónico mediante EWS en ExchangeMove and copy email messages by using EWS in Exchange

Obtenga información sobre cómo mover y copiar mensajes de correo electrónico mediante la API administrada de EWS o EWS en Exchange.Learn how to move and copy email messages by using the EWS Managed API or EWS in Exchange.

Puede usar la API administrada de EWS o EWS para mover y copiar mensajes de correo electrónico en un buzón.You can use the EWS Managed API or EWS to move and copy email messages in a mailbox.

Tabla 1. Métodos de API administrada de EWS y operaciones EWS para mover y copiar mensajes de correo electrónicoTable 1. EWS Managed API methods and EWS operations for moving and copying email messages

TareaTask Método de la API administrada de EWSEWS Managed API method Operación de EWSEWS operation
Mover un mensaje de correo electrónicoMove an email message
EmailMessage. MoveEmailMessage.Move
MoveItemMoveItem
Copiar un mensaje de correo electrónicoCopy an email message
EmailMessage. CopyEmailMessage.Copy
CopyItemCopyItem

Es importante tener en cuenta que cuando se mueve o se copia un mensaje de correo electrónico en una carpeta diferente, se crea un nuevo elemento en la nueva carpeta con un identificador de elemento único y se elimina el mensaje original.It's important to note that when you move or copy an email message into a different folder, a new item is created in the new folder with a unique item ID, and the original message is deleted. Si está moviendo o copiando un mensaje de correo electrónico entre dos carpetas en el mismo buzón, el nuevo elemento se devuelve en la respuesta, lo que proporciona acceso al nuevo identificador de elemento.If you're moving or copying an email message between two folders in the same mailbox, the new item is returned in the response, which gives you access to the new item ID. Sin embargo, si está moviendo o copiando un mensaje de correo electrónico entre dos buzones o entre un buzón y una carpeta pública, el nuevo elemento no se devolverá en la respuesta.However, if you're moving or copying an email message between two mailboxes or between a mailbox and a public folder, the new item is not returned in the response. Para obtener acceso al mensaje movido en ese escenario, use el método FindItems de la API administrada EWS o la operación de FindItem de EWS, cree una definición de propiedad extendida para la propiedad PidTagSearchKey (0x300B0102) o cree y establezca una propiedad extendida personalizada y, a continuación, busque la propiedad extendida personalizada en la nueva carpeta.To access the moved message in that scenario, use the EWS Managed API FindItems method or EWS FindItem operation, create an extended property definition for the PidTagSearchKey (0x300B0102) property, or create and set a custom extended property and then search for the custom extended property in the new folder.

La eliminación de un mensaje de correo electrónico es diferente de mover un elemento a la carpeta elementos eliminados.Deleting an email message is different than moving an item to the Deleted Items folder. Si usa el método Item. Delete de la API administrada EWS o la operación de la aplicación DeleteItem de EWS, el elemento especificado en la solicitud se quita de la carpeta original y se coloca una copia en la carpeta elementos ELIMINAdos con un identificador de elemento nuevo.If you use the EWS Managed API Item.Delete method or the EWS DeleteItem operation, the item specified in the request is removed from the original folder, and a copy is placed in the Deleted Items folder with a new item ID. A diferencia de cuando se mueve o se copia un elemento, el nuevo elemento no se devuelve en el método Delete o la respuesta de la operación DeleteItem .Unlike when you move or copy any item, the new item is not returned in the Delete method or the DeleteItem operation response. Los pasos necesarios para eliminar un correo electrónico mediante la API administrada de EWS o EWS son los mismos que para eliminar cualquier elemento genérico del almacén de Exchange.The steps involved in deleting an email by using the EWS Managed API or EWS are the same as those for deleting any generic item from the Exchange store.

Mover un mensaje de correo electrónico mediante la API administrada de EWSMove an email message by using the EWS Managed API

En el ejemplo de código siguiente se muestra cómo usar el método EmailMessage. Move para mover un mensaje de correo electrónico existente de una carpeta a otra.The following code example shows how to use the EmailMessage.Move method to move an existing email message from one folder to another.

En este ejemplo se supone que el servicio es un objeto ExchangeService válido y que Itemid es el identificador del mensaje de correo electrónico que se va a mover o copiar.This example assumes that service is a valid ExchangeService object, and that ItemId is the Id of the email message to move or copy.

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

Mover un mensaje de correo electrónico mediante EWSMove an email message by using EWS

En el siguiente ejemplo de código se muestra cómo usar la operación MoveItem para mover un mensaje de correo electrónico a la carpeta de correo electrónico no deseado.The following code example shows how to use the MoveItem operation to move an email message to the Junk Email folder.

Esta es también la solicitud XML que la API administrada de EWS envía al llamar al método Move .This is also the XML request that is sent by the EWS Managed API when calling the Move method. Los valores de algunos atributos y elementos se han abreviado para facilitar su lectura.The values of some attributes and elements have been shortened for readability.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:soap="https://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>

El servidor responde a la solicitud MoveItem con un mensaje MoveItemResponse que incluye un valor ResponseCode de NoError, que indica que el mensaje de correo electrónico se ha movido correctamente.The server responds to the MoveItem request with a MoveItemResponse message that includes a ResponseCode value of NoError, which indicates that the email message was moved successfully. La respuesta también incluye el Itemid del mensaje de correo electrónico en la nueva carpeta, que es importante almacenar porque Itemid es diferente en la nueva carpeta.The response also includes the ItemId for the email message in the new folder, which is important to store because the ItemId is different in the new folder.

Copiar un mensaje de correo electrónico mediante la API administrada de EWSCopy an email message by using the EWS Managed API

En el siguiente ejemplo de código se muestra cómo usar el método EmailMessage. Copy para copiar un mensaje de correo electrónico existente de una carpeta a otra.The following code example shows how to use the EmailMessage.Copy method to copy an existing email message from one folder to another.

En este ejemplo se supone que el servicio es un objeto ExchangeService válido y que Itemid es el identificador del mensaje de correo electrónico que se va a copiar.This example assumes that service is a valid ExchangeService object, and that ItemId is the Id of the email message to copy. Los valores de algunos parámetros se han abreviado para facilitar su lectura.The values of some parameters have been shortened for readability.

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

Copiar un mensaje de correo electrónico mediante EWSCopy an email message by using EWS

En el siguiente ejemplo de código se muestra cómo usar la operación CopyItem para copiar un mensaje de correo electrónico en una carpeta diferente del mismo buzón enviando el elemento Itemid del mensaje de correo electrónico que se va a mover y especificando la carpeta de destino en el elemento ToFolderId .The following code example shows how to use the CopyItem operation to copy an email message to different folder in the same mailbox by sending the ItemId of the email message to move, and specifying the destination folder in the ToFolderId element.

Esta es también la solicitud XML que la API administrada de EWS envía al llamar al método Copy .This is also the XML request that is sent by the EWS Managed API when calling the Copy method. Los valores de algunos atributos y elementos se han abreviado para facilitar su lectura.The values of some attributes and elements have been shortened for readability.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:soap="https://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>

El servidor responde a la solicitud CopyItem con un mensaje CopyItemResponse que incluye un valor ResponseCode de NoError, que indica que el mensaje de correo electrónico se ha copiado correctamente.The server responds to the CopyItem request with a CopyItemResponse message that includes a ResponseCode value of NoError, which indicates that the email message was copied successfully. La respuesta también incluye el Itemid del mensaje de correo electrónico en la nueva carpeta, que es importante almacenar porque Itemid es diferente en la nueva carpeta.The response also includes the ItemId for the email message in the new folder, which is important to store because the ItemId is different in the new folder.

Vea tambiénSee also