Поделиться через


Удаление вложений с помощью EWS в Exchange

Узнайте, как удалять вложения из элементов с помощью управляемого API EWS или EWS в Exchange.

У вас есть ряд вариантов удаления файлов и вложений элементов из элементов с помощью управляемого API EWS. Вы можете удалить все вложения из сообщения, удалить по имени файла или по позиции в коллекции. Для каждого из этих параметров существует метод AttachmentCollection .

И наоборот, в EWS, независимо от того, удаляете ли вы все вложения из элемента или только один, последовательность операций одинакова. В отличие от управляемого API EWS, EWS не включает отдельные операции удаления на основе имени или положения в массиве вложений.

Таблица 1. Методы управляемого API EWS и операции EWS для удаления вложений

Задача Метод управляемого API EWS Операция EWS
Удалите все вложения из элемента.
Item.Bind, за которым следует AttachmentCollection.Clear, за которым следует EmailMessage.Update
GetItem , за которым следует DeleteAttachment
Удаление вложения из элемента по имени.
Item.Bind, за которым следует AttachmentCollection.Remove, а затем EmailMessage.Update
GetItem , за которым следует DeleteAttachment
Удаление вложения из элемента по позиции в коллекции.
Item.Bind, за которым следует AttachmentCollection.RemoveAt, а затем EmailMessage.Update
GetItem , за которым следует DeleteAttachment

Удаление всех вложений из сообщения электронной почты с помощью управляемого API EWS

В следующем примере кода показано, как удалить все вложения из сообщения электронной почты с помощью:

  1. Использование метода EmailMessage.Bind для привязки к существующему сообщению электронной почты и получения коллекции вложений.

  2. Использование метода AttachmentCollection.Clear для удаления всех вложений из сообщения электронной почты.

  3. Использование метода EmailMessage.Update для сохранения изменений.

В этом примере предполагается, что служба является допустимым объектом ExchangeService , itemId — это ItemId сообщения, из которого будут удалены вложения, и что пользователь прошел проверку подлинности на сервере 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);
}

Удаление вложения по имени из сообщения электронной почты с помощью управляемого API EWS

В следующем примере кода показано, как удалить вложение по имени:

  1. Использование метода EmailMessage.Bind для привязки к существующему сообщению электронной почты и получения коллекции вложений.

  2. Использование метода AttachmentCollection.Remove для удаления вложения с именем FileAttachment.txt.

  3. Использование метода EmailMessage.Update для сохранения изменений.

В этом примере предполагается, что служба является допустимым объектом ExchangeService , itemId — это ItemId сообщения, из которого будет удалено вложение, и что пользователь прошел проверку подлинности на сервере 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);
}

Удаление вложений по позиции с помощью управляемого API EWS

В следующем примере кода показано, как удалить вложение по позиции с помощью:

  1. Использование метода EmailMessage.Bind для привязки к существующему сообщению электронной почты и получения коллекции вложений и свойства EmailMessage.HasAttachments .

  2. Использование метода AttachmentCollection.Remove для удаления первого вложения в коллекции.

  3. Использование метода EmailMessage.Update для сохранения изменений.

В этом примере предполагается, что служба является допустимым объектом ExchangeService , itemId — это ItemId сообщения, из которого будет удалено вложение, и что пользователь прошел проверку подлинности на сервере 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

Чтобы удалить вложения с помощью EWS, сначала необходимо получить сообщение и коллекцию вложений, чтобы определить AttachmentId (GetAttachment и DeleteAttachment) удаляемого вложения. После удаления одного или нескольких значений AttachmentId вызовите операцию DeleteAttachment , чтобы удалить указанные вложения из сообщения.

В следующем примере кода показано, как использовать операцию GetItem для получения сообщения электронной почты и коллекции вложений сообщения. Это также первый XML-запрос, который отправляет управляемый API EWS при использовании управляемого API EWS для удаления всех вложений из сообщения электронной почты. Значения некоторых атрибутов укорочены для удобства чтения.

<?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="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, содержащее элемент ResponseCode со значением NoError (что говорит об успешном извлечении письма) и значения AttachmentId существующих вложений.

<?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="http://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="http://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="http://schemas.microsoft.com/exchange/services/2006/messages"
                       xmlns:t="http://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 удаляемых вложений.

<?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="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 , которое содержит значение ResponseCodeNoError для каждого элемента DeleteAttachmentResponseMessage, указывающее, что каждое вложение было успешно удалено. Значения некоторых атрибутов укорочены для удобства чтения.

<?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="http://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="http://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="http://schemas.microsoft.com/exchange/services/2006/messages"
                                xmlns:t="http://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>

См. также