Exchange で EWS を使用して添付物を削除するDelete attachments by using EWS in Exchange

Exchange で EWS マネージ API または EWS を使用して、EWS アイテムから添付物を削除する方法について説明します。Learn how to delete attachments from items by using the EWS Managed API or EWS in Exchange.

EWS マネージ API を使用して、アイテムからファイルおよびアイテム添付を削除する場合、いくつかのオプションがあります。You have a number of options when it comes to deleting file and item attachments from items by using the EWS Managed API. メッセージからすべての添付物を削除して、ファイル名による削除やコレクション内の位置による削除を行うことができます。You can delete all the attachments from the message, delete by a file name, or delete by position in the collection. これらのオプションそれぞれについて、AttachmentCollection メソッドがあります。For each of these options, there is an AttachmentCollection method.

一方、EWS を使用して、アイテムからすべての添付物を削除する場合も、1 つだけ削除する場合も、一連の操作は同じです。EWS マネージ API とは異なり、EWS には添付物の配列内の名前または位置に基づいて削除するための別の操作はありません。Conversely, with EWS, no matter whether you're deleting all attachments from an item or just one, the sequence of operations is same. Unlike the EWS Managed API, EWS does not include separate operations to delete based on name or position in the attachments array.

表 1. 添付物を削除するための EWS マネージ API メソッドと EWS 操作Table 1. EWS Managed API methods and EWS operations for deleting attachments

タスクTask EWS マネージ API メソッドEWS Managed API method EWS 操作EWS operation
アイテムからすべての添付物を削除します。Delete all attachments from an item.
Item.Bind、その後に AttachmentCollection.Clear、その後に EmailMessage.UpdateItem.Bind, followed by AttachmentCollection.Clear, followed by EmailMessage.Update
GetItem、その後に DeleteAttachmentGetItem followed by DeleteAttachment
名前でアイテムから添付物を削除します。Delete an attachment from an item by name.
Item.Bind、その後に AttachmentCollection.Remove、その後に EmailMessage.UpdateItem.Bind, followed by AttachmentCollection.Remove, followed by EmailMessage.Update
GetItem、その後に DeleteAttachmentGetItem followed by DeleteAttachment
コレクション内の位置でアイテムから添付物を削除します。Delete an attachment from an item by position in the collection.
Item.Bind、その後に AttachmentCollection.RemoveAt、その後に EmailMessage.UpdateItem.Bind, followed by AttachmentCollection.RemoveAt, followed by EmailMessage.Update
GetItem、その後に DeleteAttachmentGetItem followed by DeleteAttachment

EWS マネージ API を使用して、電子メールからすべての添付物を削除するDelete all attachments from an email by using the EWS Managed API

次のコード例は、電子メールから添付物をすべて削除する方法を示しています。The following code example shows how to delete all attachments from an email by:

  1. EmailMessage.Bind メソッドを使用して、既存の電子メール メッセージにバインドし、Attachments のコレクションを取得します。Using the EmailMessage.Bind method to bind to an existing email message and retrieve the collection of Attachments.

  2. AttachmentCollection.Clear メソッドを使用して、電子メールからすべての添付物を削除します。Using the AttachmentCollection.Clear method to delete all the attachments from the email.

  3. EmailMessage.Update メソッドを使用して、変更を保存します。Using the EmailMessage.Update method to save the changes.

この例では、service が有効な ExchangeService オブジェクトであり、itemId が添付物を削除するメッセージの ItemId であり、ユーザーが Exchange Server に認証されたと想定しています。This example assumes that service is a valid ExchangeService object, itemId is the ItemId of the message from which attachments will be deleted, and that the user has been authenticated to an Exchange server.

public static void DeleteAllAttachments(ExchangeService service, ItemId itemId)
{
    // Bind to an existing message by using its item ID and requesting its attachments collection.
    // This method results in a GetItem call to EWS.
    EmailMessage message = EmailMessage.Bind(service, itemId, new PropertySet(ItemSchema.Attachments));
    // Delete all attachments from the message.
    message.Attachments.Clear();
    // Save the updated message.
    // This method results in an DeleteAttachment call to EWS.
    message.Update(ConflictResolutionMode.AlwaysOverwrite);
}

EWS マネージ API を使用して、電子メールから名前ですべての添付物を削除するDelete an attachment by name from an email by using the EWS Managed API

次のコード例では、名前で添付物を削除する方法を示しています。The following code example shows how delete an attachment by name by:

  1. EmailMessage.Bind メソッドを使用して、既存の電子メール メッセージにバインドし、Attachments のコレクションを取得します。Using the EmailMessage.Bind method to bind to an existing email message and retrieve the collection of Attachments.

  2. AttachmentCollection.Remove メソッドを使用して、FileAttachment.txt という名前の添付物を削除します。Using the AttachmentCollection.Remove method to delete an attachment named FileAttachment.txt.

  3. EmailMessage.Update メソッドを使用して、変更を保存します。Using the EmailMessage.Update method to save the changes.

この例では、service が有効な ExchangeService オブジェクトであり、itemId が添付物を削除するメッセージの ItemId であり、ユーザーが Exchange Server に認証されたと想定しています。This example assumes that service is a valid ExchangeService object, itemId is the ItemId of the message from which the attachment will be deleted, and that the user has been authenticated to an Exchange server.

public static void DeleteNamedAttachments(ExchangeService service, ItemId itemId)
{
    // Bind to an existing message by using its item ID and requesting its attachments collection.
    // This method results in a GetItem call to EWS.
    EmailMessage message = EmailMessage.Bind(service, itemId, new PropertySet(ItemSchema.Attachments));
    // Iterate through the attachments collection and delete the attachment named "FileAttachment.txt," if it exists.
    foreach (Attachment attachment in message.Attachments)
    {
        if (attachment.Name == "FileAttachment.txt")
        {
            message.Attachments.Remove(attachment);
            break;
        }
    }
    // Save the updated message.
    // This method results in an DeleteAttachment call to EWS.
    message.Update(ConflictResolutionMode.AlwaysOverwrite);
}

EWS マネージ API を使用して位置で添付物を削除するDelete attachments by position by using the EWS Managed API

次のコード例は、添付物を位置で削除する方法を示しています。The following code example shows how to delete an attachment by position by:

  1. EmailMessage.Bind メソッドを使用して、既存の電子メール メッセージにバインドし、Attachments のコレクションと EmailMessage.HasAttachments プロパティを取得します。Using the EmailMessage.Bind method to bind to an existing email message and retrieve the collection of Attachments and the EmailMessage.HasAttachments property.

  2. AttachmentCollection.Remove メソッドを使用して、コレクションの最初の添付物を削除します。Using the AttachmentCollection.Remove method to delete the first attachment in the collection.

  3. EmailMessage.Update メソッドを使用して、変更を保存します。Using the EmailMessage.Update method to save the changes.

この例では、service が有効な ExchangeService オブジェクトであり、itemId が添付物を削除するメッセージの ItemId であり、ユーザーが Exchange Server に認証されたと想定しています。This example assumes that service is a valid ExchangeService object, itemId is the ItemId of the message from which the attachment will be deleted, and that the user has been authenticated to an Exchange server.

public static void DeleteAttachmentByPosition(ExchangeService service, ItemId itemId)
{
    // Bind to an existing message by using its item ID and requesting the HasAttachments property and the attachments collection.
    // This method results in a GetItem call to EWS.
    EmailMessage message = EmailMessage.Bind(service, itemId, new PropertySet(EmailMessageSchema.HasAttachments, ItemSchema.Attachments));
    // Remove attachments using the zero-based index position of the attachment in the attachments collection.
    if (message.HasAttachments)
    {
        message.Attachments.RemoveAt(0);
    }
    // Save the updated message.
    // This method results in an DeleteAttachment call to EWS.
    message.Update(ConflictResolutionMode.AlwaysOverwrite);
}

EWS を使用してアイテムから添付物を削除するDelete attachments from an item by using EWS

EWS を使用して添付物を削除するには、最初にメッセージと添付物のコレクションを取得して、削除する添付物の AttachmentId (GetAttachment と DeleteAttachment) を取得します。To delete attachments by using EWS, you first need to retrieve the message and the attachment collection to determine the AttachmentId (GetAttachment and DeleteAttachment) of the attachment to delete. 削除する 1 つ以上の AttachmentId の値を指定してから、DeleteAttachment 操作を呼び出して指定された添付物をメッセージから削除します。After you have one or more AttachmentId values to delete, call the DeleteAttachment operation to remove the specified attachments from the message.

次のコード例は、GetItem 操作を使用して電子メール メッセージとメッセージの添付物のコレクションを取得する方法を示しています。これは、EWS マネージ API を使用して電子メールからすべての添付物を削除するときに EWS マネージ API が送信する最初の XML 要求でもあります。読みやすくするため、一部の属性の値が短縮されています。The following code example shows how to use the GetItem operation to get an email message and the collection of attachments on the message. This is also the first XML request that the EWS Managed API sends when you use the EWS Managed API to delete all attachments from an email. The values of some attributes are 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="Exchange2007_SP1" />
    <t:TimeZoneContext>
      <t:TimeZoneDefinition Id="Central Standard Time" />
    </t:TimeZoneContext>
  </soap:Header>
  <soap:Body>
    <m:GetItem>
      <m:ItemShape>
        <t:BaseShape>IdOnly</t:BaseShape>
        <t:AdditionalProperties>
          <t:FieldURI FieldURI="item:Attachments" />
        </t:AdditionalProperties>
      </m:ItemShape>
      <m:ItemIds>
        <t:ItemId Id="uqE1AAA=" />
      </m:ItemIds>
    </m:GetItem>
  </soap:Body>
</soap:Envelope>

サーバーは、 GetItem 要求に GetItemResponse メッセージで応答します。このメッセージには、電子メールが正常に作成されたことを示す NoError の **ResponseCode ** 値 、および既存の添付物の AttachmentId が含まれます。The server responds to the GetItem request with a GetItemResponse message that includes a ResponseCode value of NoError, which indicates that the email was retrieved successfully, and the AttachmentId values of the existing attachments.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15"
                         MinorVersion="0"
                         MajorBuildNumber="939"
                         MinorBuildNumber="12"
                         Version="V2_11"
                         xmlns:h="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <m:GetItemResponse xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
                       xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:GetItemResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:Items>
            <t:Message>
              <t:ItemId Id="uqE1AAA="
                        ChangeKey="CQAAABYAAAAFI5DJmZv+TLtyLOLIF1S5AAAXulcd" />
              <t:Attachments>
                <t:FileAttachment>
                  <t:AttachmentId Id="IpHLObE=" />
                  <t:Name>FileAttachment.txt</t:Name>
                </t:FileAttachment>
                <t:FileAttachment>
                  <t:AttachmentId Id="QuHSSmY=" />
                  <t:Name>SecondAttachment.txt</t:Name>
                </t:FileAttachment>
                <t:FileAttachment>
                  <t:AttachmentId Id="qf2KoPo=" />
                  <t:Name>ThirdAttachment.jpg</t:Name>
                </t:FileAttachment>
                <t:FileAttachment>
                  <t:AttachmentId Id="NFQMnMc=" />
                  <t:Name>FourthAttachment.txt</t:Name>
                </t:FileAttachment>
                <t:ItemAttachment>
                  <t:AttachmentId Id="jJvbLXQ=" />
                  <t:Name>Attached Message Item</t:Name>
                </t:ItemAttachment>
              </t:Attachments>
            </t:Message>
          </m:Items>
        </m:GetItemResponseMessage>
      </m:ResponseMessages>
    </m:GetItemResponse>
  </s:Body>
</s:Envelope>

どの添付物を削除するか判別し、DeleteAttachment 操作を呼び出し、削除する添付物の AttachmentId 値を含めます。After you determine which attachment to delete, call the DeleteAttachment operation and include the AttachmentId values of the attachments to delete.

<?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="Exchange2007_SP1" />
    <t:TimeZoneContext>
      <t:TimeZoneDefinition Id="Central Standard Time" />
    </t:TimeZoneContext>
  </soap:Header>
  <soap:Body>
    <m:DeleteAttachment>
      <m:AttachmentIds>
        <t:AttachmentId Id="IpHLObE=" />
        <t:AttachmentId Id="QuHSSmY=" />
        <t:AttachmentId Id="qf2KoPo=" />
        <t:AttachmentId Id="NFQMnMc=" />
        <t:AttachmentId Id="jJvbLXQ=" />
      </m:AttachmentIds>
    </m:DeleteAttachment>
  </soap:Body>
</soap:Envelope>

サーバーは、DeleteAttachment 要求に DeleteAttachmentResponse メッセージで応答します。このメッセージには、それぞれの添付物が正常に削除されたことを示す、DeleteAttachmentResponseMessage ごとの NoErrorResponseCode 値が含まれます。 読みやすくするため、一部の属性の値が短縮されています。The values of some attributes are shortened for readability.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15"
                         MinorVersion="0"
                         MajorBuildNumber="939"
                         MinorBuildNumber="12"
                         Version="V2_11"
                         xmlns:h="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <m:DeleteAttachmentResponse xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
                                xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:DeleteAttachmentResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:RootItemId RootItemId="uqE1AAA=" RootItemChangeKey="AAAXulck" />
        </m:DeleteAttachmentResponseMessage>
        <m:DeleteAttachmentResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:RootItemId RootItemId="uqE1AAA=" RootItemChangeKey="AAAXulck" />
        </m:DeleteAttachmentResponseMessage>
        <m:DeleteAttachmentResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:RootItemId RootItemId="uqE1AAA=" RootItemChangeKey="AAAXulck" />
        </m:DeleteAttachmentResponseMessage>
        <m:DeleteAttachmentResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:RootItemId RootItemId="uqE1AAA=" RootItemChangeKey="AAAXulck" />
        </m:DeleteAttachmentResponseMessage>
        <m:DeleteAttachmentResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:RootItemId RootItemId="uqE1AAA=" RootItemChangeKey="AAAXulck" />
        </m:DeleteAttachmentResponseMessage>
      </m:ResponseMessages>
    </m:DeleteAttachmentResponse>
  </s:Body>
</s:Envelope>

関連項目See also