Перемещение и копирование сообщений электронной почты с помощью EWS в Exchange
Узнайте, как перемещать и копировать сообщения электронной почты с помощью управляемого API EWS или EWS в Exchange.
Управляемый API EWS или EWS можно использовать для перемещения и копирования сообщений электронной почты в почтовом ящике.
Таблица 1. Методы управляемого API EWS и операции EWS для перемещения и копирования сообщений электронной почты
Задача | Метод управляемого API EWS | Операция EWS |
---|---|---|
Перемещение сообщения электронной почты |
EmailMessage.Move |
MoveItem |
Копирование сообщения электронной почты |
EmailMessage.Copy |
CopyItem |
Важно отметить, что при перемещении или копировании сообщения электронной почты в другую папку создается новый элемент с уникальным идентификатором элемента, а исходное сообщение удаляется. При перемещении или копировании сообщения электронной почты между двумя папками в одном почтовом ящике новый элемент возвращается в ответе, что дает доступ к идентификатору нового элемента. Однако при перемещении или копировании сообщения электронной почты между двумя почтовыми ящиками или между почтовым ящиком и общедоступной папкой новый элемент не возвращается в ответе. Чтобы получить доступ к перемещенному сообщению в этом сценарии, используйте метод FindItems управляемого API EWS или операцию EWS FindItem , создайте определение расширенного свойства для свойства PidTagSearchKey (0x300B0102) или создайте и задайте пользовательское расширенное свойство, а затем выполните поиск пользовательского расширенного свойства в новой папке.
Удаление сообщения электронной почты отличается от перемещения элемента в папку Удаленные. При использовании метода EWS Managed API Item.Delete или операции EWS DeleteItem элемент, указанный в запросе, удаляется из исходной папки, а копия помещается в папку "Удаленные" с новым идентификатором элемента. В отличие от перемещения или копирования любого элемента новый элемент не возвращается в методе Delete или ответе операции DeleteItem . Действия, связанные с удалением электронной почты с помощью управляемого API EWS или EWS , совпадают с действиями по удалению любого универсального элемента из хранилища Exchange.
Перемещение сообщения электронной почты с помощью управляемого API EWS
В следующем примере кода показано, как использовать метод EmailMessage.Move для перемещения существующего сообщения электронной почты из одной папки в другую.
В этом примере предполагается, что служба является допустимым объектом ExchangeService , а ItemId — идентификатором сообщения электронной почты для перемещения или копирования.
// 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.");
Перемещение сообщения электронной почты с помощью EWS
В следующем примере кода показано, как использовать операцию MoveItem для перемещения сообщения электронной почты в папку Нежелательная Email.
Это также XML-запрос, который отправляется управляемым API EWS при вызове метода Move . Для удобства значения некоторых атрибутов и элементов были сокращены.
<?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>
Сервер отвечает на запрос MoveItemсообщением MoveItemResponse , которое содержит значение ResponseCodeNoError, указывающее, что сообщение электронной почты было успешно перемещено. Ответ также включает ItemId для сообщения электронной почты в новой папке, который важно сохранить, так как ItemId отличается в новой папке.
Копирование сообщения электронной почты с помощью управляемого API EWS
В следующем примере кода показано, как с помощью метода EmailMessage.Copy скопировать существующее сообщение электронной почты из одной папки в другую.
В этом примере предполагается, что служба является допустимым объектом ExchangeService , а ItemId — идентификатором копируемого сообщения электронной почты. Значения некоторых параметров сокращены для удобства чтения.
// 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.");
Копирование сообщения электронной почты с помощью EWS
В следующем примере кода показано, как с помощью операции CopyItem скопировать сообщение электронной почты в другую папку в том же почтовом ящике, отправив ItemId перемещаемого сообщения электронной почты и указав целевую папку в элементе ToFolderId .
Это также XML-запрос, который отправляется управляемым API EWS при вызове метода Copy . Для удобства значения некоторых атрибутов и элементов были сокращены.
<?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>
Сервер отвечает на запрос CopyItem сообщением CopyItemResponse , которое содержит значение ResponseCodeNoError, указывающее, что сообщение электронной почты было успешно скопировано. Ответ также включает ItemId для сообщения электронной почты в новой папке, который важно сохранить, так как ItemId отличается в новой папке.