Exchange において EWS を使用して電子メール メッセージを移動およびコピーするMove and copy email messages by using EWS in Exchange

Exchange で EWS マネージ API または EWS を使用して電子メール メッセージを移動およびコピーする方法について説明します。Learn how to move and copy email messages by using the EWS Managed API or EWS in Exchange.

EWS マネージ API または EWS を使用すると、メールボックスの電子メール メッセージを移動およびコピーすることができます。You can use the EWS Managed API or EWS to move and copy email messages in a mailbox.

表 1. 電子メール メッセージを移動およびコピーするための EWS マネージ API メソッドと EWS 操作Table 1. EWS Managed API methods and EWS operations for moving and copying email messages

タスクTask EWS マネージ API メソッドEWS Managed API method EWS 操作EWS operation
電子メール メッセージの移動Move an email message
EmailMessage.MoveEmailMessage.Move
MoveItemMoveItem
電子メール メッセージのコピーCopy an email message
EmailMessage.CopyEmailMessage.Copy
CopyItemCopyItem

電子メール メッセージを別のフォルダーに移動したりコピーしたりすると、重要なこととして、新しいフォルダーに新しいアイテムが一意のアイテム ID で作成され、元のメッセージが削除されるという点に注意してください。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. 同じメールボックスにある 2 つのフォルダーで電子メール メッセージを移動またはコピーすると、応答で新しいアイテムが返され、新しいアイテム ID に対するアクセス権が付与されます。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. ただし、2 つのメールボックス間で、またはメールボックスとパブリック フォルダー間で電子メール メッセージを移動またはコピーすると、応答で新しいアイテムが返されません。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. このシナリオの場合に、移動したメッセージにアクセスするには、EWS マネージ API FindItems メソッドまたは 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. EWS マネージ API Item.Delete メソッドまたは EWS DeleteItem 操作を使用する場合、要求で指定されたアイテムは元のフォルダーから除去されて、新しいアイテム ID で [削除済みアイテム] フォルダーにコピーが配置されます。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. [EWS マネージ API または EWS を使用して電子メールを削除する](how-to-work-with-exchange-mailbox-items-by-using-ews-in-exchange.md#bk_deleteewsma)ための手順は、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.

EWS マネージ API を使用して電子メール メッセージを移動するMove 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.

この例では、service は有効な ExchangeService オブジェクトで、ItemId は移動またはコピー対象のメール メッセージの Id であると想定しています。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.");

EWS を使用して電子メール メッセージを移動するMove 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.

これは、Move メソッドの呼び出し時に EWS マネージ API によって送信される XML 要求でもあります。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 要求に MoveItemResponse メッセージで応答します。このメッセージには、電子メールが正常に移動されたことを示す、NoErrorResponseCode 値が含まれます。またこの応答には、新しいフォルダーにおけるこの電子メール メッセージの ItemId も含まれます。新しいフォルダーでは ItemId が異なるため、この値を格納することが重要となります。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. 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.

EWS マネージ API を使用して電子メール メッセージをコピーするCopy 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.

この例では、service は有効な ExchangeService オブジェクトで、ItemId はコピー対象のメール メッセージの Id であると想定しています。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.");

EWS を使用して電子メール メッセージをコピーするCopy an email message by using EWS

次のコード例は、CopyItem 操作を使用して同じでメールボックスにある別のフォルダーに電子メール メッセージをコピーする方法を示しています。コピーするために、移動する電子メール メッセージの ItemId を送信し、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.

これは、Copy メソッドの呼び出し時に EWS マネージ API によって送信される XML 要求でもあります。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 要求に CopyItemResponse メッセージで応答します。このメッセージには、電子メールが正常にコピーされたことを示す、NoErrorResponseCode 値が含まれます。またこの応答には、新しいフォルダーにおけるこの電子メール メッセージの ItemId も含まれます。新しいフォルダーでは ItemId が異なるため、この値を格納することが重要となります。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. 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