Перемещение и копирование сообщений электронной почты с помощью EWS в ExchangeMove and copy email messages by using EWS in Exchange

Сведения о том, как перемещать и копировать сообщения электронной почты с помощью управляемого API EWS или EWS в Exchange.Learn how to move and copy email messages by using the EWS Managed API or EWS in Exchange.

Для перемещения и копирования сообщений электронной почты в почтовый ящик можно использовать управляемый API EWS или EWS.You can use the EWS Managed API or EWS to move and copy email messages in a mailbox.

Таблица 1. Методы управляемого API EWS и операции EWS для перемещения и копирования сообщений электронной почтыTable 1. EWS Managed API methods and EWS operations for moving and copying email messages

ЗадачаTask Метод управляемого API EWSEWS Managed API method Операция EWSEWS operation
Перемещение сообщения электронной почтыMove an email message
EmailMessage. MoveEmailMessage.Move
MoveItemMoveItem
Копирование сообщения электронной почтыCopy an email message
EmailMessage. CopyEmailMessage.Copy
CopyItemCopyItem

Важно отметить, что при перемещении или копировании сообщения электронной почты в другую папку в новой папке создается новый элемент с уникальным ИДЕНТИФИКАТОРом элемента, а исходное сообщение удаляется.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. Если вы перемещаете или копируете сообщение электронной почты между двумя папками в одном почтовом ящике, в ответе возвращается новый элемент, который предоставляет доступ к новому ИДЕНТИФИКАТОРу элемента.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. Однако если вы перемещаете или копируете сообщение электронной почты между двумя почтовыми ящиками, а также между почтовым ящиком и общедоступной папкой, новый элемент не возвращается в ответе.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. Чтобы получить доступ к перемещенному сообщению в этом сценарии, используйте метод FindItems управляемого API EWS или операцию FindItem , Создайте определение расширенного свойства для свойства PidTagSearchKey (0x300B0102) или создайте и задайте пользовательское расширенное свойство, а затем выполните поиск настраиваемого расширенного свойства в новой папке.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.

Удаление сообщения электронной почты отличается от перемещения элемента в папку "Удаленные".Deleting an email message is different than moving an item to the Deleted Items folder. Если вы используете метод Item. Delete управляемого API EWS или EWS DeleteItem , элемент, указанный в запросе, удаляется из исходной папки, а копия помещается в папку "Удаленные" с новым идентификатором элемента.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. В отличие от того, что вы перемещаете или копируете какой-либо элемент, новый элемент не возвращается в методе Delete или ответе операции DeleteItem .Unlike when you move or copy any item, the new item is not returned in the Delete method or the DeleteItem operation response. Действия, выполняемые при удалении электронной почты с помощью управляемого API EWS или EWS , такие же, как и для удаления любого универсального элемента из хранилища 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.

Перемещение сообщения электронной почты с помощью управляемого API EWSMove an email message by using the EWS Managed API

В приведенном ниже примере кода показано, как с помощью метода EmailMessage. Move переместить существующее сообщение электронной почты из одной папки в другую.The following code example shows how to use the EmailMessage.Move method to move an existing email message from one folder to another.

В этом примере предполагается, что Служба является допустимым объектом ExchangeService , а идентификатор ItemIdидентификатором сообщения электронной почты, которое необходимо переместить или скопировать.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.");

Перемещение сообщения электронной почты с помощью EWSMove an email message by using EWS

В приведенном ниже примере кода показано, как с помощью операции MoveItem переместить сообщение электронной почты в папку нежелательной почты.The following code example shows how to use the MoveItem operation to move an email message to the Junk Email folder.

Это также XML-запрос, который отправляется управляемым API EWS при вызове метода Move .This is also the XML request that is sent by the EWS Managed API when calling the Move method. Для удобства значения некоторых атрибутов и элементов были сокращены.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>

Сервер отвечает на запрос MoveItem с сообщением мовеитемреспонсе , которое содержит значение респонсекоде , указывающее, чтосообщение электронной почты было перемещено успешно.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. Ответ также включает идентификатор ItemId для сообщения электронной почты в новой папке, который важен для хранения, так как идентификатор элемента ( ItemId ) отличается в новой папке.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.

Копирование сообщения электронной почты с помощью управляемого API EWSCopy an email message by using the EWS Managed API

В приведенном ниже примере кода показано, как с помощью метода EmailMessage. Copy скопировать существующее сообщение электронной почты из одной папки в другую.The following code example shows how to use the EmailMessage.Copy method to copy an existing email message from one folder to another.

В этом примере предполагается, что Служба является допустимым объектом ExchangeService , а идентификатор ItemIdидентификатором сообщения электронной почты, которое необходимо скопировать.This example assumes that service is a valid ExchangeService object, and that ItemId is the Id of the email message to copy. Значения некоторых параметров были сокращены для удобочитаемости.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.");

Копирование электронного сообщения с помощью EWSCopy an email message by using EWS

В следующем примере кода показано, как с помощью операции CopyItem скопировать сообщение электронной почты в другую папку в том же почтовом ящике, отправив идентификатор ItemId сообщения электронной почты для перемещения и указав папку назначения в элементе тофолдерид .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.

Это также XML-запрос, который отправляется управляемым API EWS при вызове метода Copy .This is also the XML request that is sent by the EWS Managed API when calling the Copy method. Для удобства значения некоторых атрибутов и элементов были сокращены.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>

Сервер отвечает на запрос CopyItem с сообщением копитемреспонсе , которое содержит значение респонсекоде , указывающее, чтосообщение электронной почты было успешно скопировано.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. Ответ также включает идентификатор ItemId для сообщения электронной почты в новой папке, который важен для хранения, так как идентификатор элемента ( ItemId ) отличается в новой папке.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.

См. такжеSee also