Mover e copiar mensagens de email usando o EWS no ExchangeMove and copy email messages by using EWS in Exchange

Saiba como mover e copiar mensagens de email usando a API gerenciada do EWS ou o EWS no Exchange.Learn how to move and copy email messages by using the EWS Managed API or EWS in Exchange.

Você pode usar a API gerenciada do EWS ou o EWS para mover e copiar mensagens de email em uma caixa de correio.You can use the EWS Managed API or EWS to move and copy email messages in a mailbox.

Tabela 1. Métodos da API gerenciada do EWS e operações do EWS para mover e copiar mensagens de emailTable 1. EWS Managed API methods and EWS operations for moving and copying email messages

TarefaTask Método de API gerenciada do EWSEWS Managed API method Operação do EWSEWS operation
Mover uma mensagem de emailMove an email message
EmailMessage. moveEmailMessage.Move
MoveItemMoveItem
Copiar uma mensagem de emailCopy an email message
EmailMessage. CopyEmailMessage.Copy
CopyItemCopyItem

É importante observar que quando você move ou copia uma mensagem de email em uma pasta diferente, um novo item é criado na nova pasta com uma ID de item exclusivo e a mensagem original é excluída.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. Se você estiver movendo ou copiando uma mensagem de email entre duas pastas na mesma caixa de correio, o novo item será retornado na resposta, o que fornece acesso à nova ID de item.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. No entanto, se você estiver movendo ou copiando uma mensagem de email entre duas caixas de correio ou entre uma caixa de correio e uma pasta pública, o novo item não será retornado na resposta.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 acessar a mensagem movida nesse cenário, use o método FindItems da API gerenciada do EWS ou a operação do EWS FindItem , crie uma definição de propriedade estendida para a propriedade PidTagSearchKey (0x300B0102), ou crie e defina uma propriedade estendida personalizada e, em seguida, procure a propriedade estendida personalizada na nova pasta.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.

Excluir uma mensagem de email é diferente de mover um item para a pasta itens excluídos.Deleting an email message is different than moving an item to the Deleted Items folder. Se você usar o item da API gerenciada do EWS . Delete ou a operação do EWS DeleteItem , o item especificado na solicitação será removido da pasta original e uma cópia será colocada na pasta itens excluídos com uma nova ID de item.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. Diferentemente de quando você move ou copia qualquer item, o novo item não é retornado no método delete ou a resposta da operação DeleteItem .Unlike when you move or copy any item, the new item is not returned in the Delete method or the DeleteItem operation response. As etapas envolvidas na exclusão de um email usando a API gerenciada do EWS ou EWS são as mesmas que as para excluir qualquer item genérico do repositório do 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 uma mensagem de email usando a API gerenciada do EWSMove an email message by using the EWS Managed API

O exemplo de código a seguir mostra como usar o método EmailMessage. move para mover uma mensagem de email existente de uma pasta para outra.The following code example shows how to use the EmailMessage.Move method to move an existing email message from one folder to another.

Este exemplo pressupõe que o serviço é um objeto ExchangeService válido e que ItemId é a ID da mensagem de email a ser movida ou copiada.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 uma mensagem de email usando o EWSMove an email message by using EWS

O exemplo de código a seguir mostra como usar a operação MoveItem para mover uma mensagem de email para a pasta lixo eletrônico.The following code example shows how to use the MoveItem operation to move an email message to the Junk Email folder.

Essa é também a solicitação XML que é enviada pela API gerenciada do EWS ao chamar o método move .This is also the XML request that is sent by the EWS Managed API when calling the Move method. Os valores de alguns atributos e elementos foram reduzidos para facilitar a leitura.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>

O servidor responde à solicitação MoveItem com uma mensagem MoveItemResponse que inclui um valor de ResponseCode de NOERROR, que indica que a mensagem de email foi movida com êxito.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. A resposta também inclui o ItemId para a mensagem de email na nova pasta, o que é importante armazenar porque ItemId é diferente na nova pasta.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 uma mensagem de email usando a API gerenciada do EWSCopy an email message by using the EWS Managed API

O exemplo de código a seguir mostra como usar o método EmailMessage. Copy para copiar uma mensagem de email existente de uma pasta para outra.The following code example shows how to use the EmailMessage.Copy method to copy an existing email message from one folder to another.

Este exemplo pressupõe que o serviço é um objeto ExchangeService válido e que ItemId é a ID da mensagem de email a ser copiada.This example assumes that service is a valid ExchangeService object, and that ItemId is the Id of the email message to copy. Os valores de alguns parâmetros foram reduzidos para legibilidade.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 uma mensagem de email usando EWSCopy an email message by using EWS

O exemplo de código a seguir mostra como usar a operação CopyItem para copiar uma mensagem de email para uma pasta diferente na mesma caixa de correio enviando o ItemId da mensagem de email a ser movida e especificando a pasta de destino no 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.

Essa é também a solicitação XML que é enviada pela API gerenciada do EWS ao chamar o método Copy .This is also the XML request that is sent by the EWS Managed API when calling the Copy method. Os valores de alguns atributos e elementos foram reduzidos para facilitar a leitura.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>

O servidor responde à solicitação CopyItem com uma mensagem CopyItemResponse que inclui um valor de ResponseCode de NOERROR, que indica que a mensagem de email foi copiada com êxito.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. A resposta também inclui o ItemId para a mensagem de email na nova pasta, o que é importante armazenar porque ItemId é diferente na nova pasta.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.

Confira tambémSee also