Eliminación de datos adjuntos mediante EWS en Exchange
Obtenga información sobre cómo eliminar datos adjuntos de elementos mediante la API administrada de EWS o EWS en Exchange.
Tiene varias opciones a la hora de eliminar datos adjuntos de archivos y elementos de elementos mediante la API administrada de EWS. Puede eliminar todos los datos adjuntos del mensaje, eliminarlos por un nombre de archivo o eliminarlos por posición en la colección. Para cada una de estas opciones, hay un método AttachmentCollection .
Por el contrario, con EWS, independientemente de si va a eliminar todos los datos adjuntos de un elemento o solo uno, la secuencia de operaciones es la misma. A diferencia de la API administrada de EWS, EWS no incluye operaciones independientes para eliminar en función del nombre o la posición de la matriz de datos adjuntos.
Tabla 1. Métodos de API administrada de EWS y operaciones de EWS para eliminar datos adjuntos
Task | Método de la API administrada de EWS | Operación de EWS |
---|---|---|
Elimine todos los datos adjuntos de un elemento. |
Item.Bind, seguido de AttachmentCollection.Clear, seguido de EmailMessage.Update |
GetItem seguido de DeleteAttachment |
Elimine los datos adjuntos de un elemento por su nombre. |
Item.Bind, seguido de AttachmentCollection.Remove, seguido de EmailMessage.Update |
GetItem seguido de DeleteAttachment |
Elimine los datos adjuntos de un elemento por posición en la colección. |
Item.Bind, seguido de AttachmentCollection.RemoveAt, seguido de EmailMessage.Update |
GetItem seguido de DeleteAttachment |
Eliminación de todos los datos adjuntos de un correo electrónico mediante la API administrada de EWS
En el ejemplo de código siguiente se muestra cómo eliminar todos los datos adjuntos de un correo electrónico mediante:
Usar el método EmailMessage.Bind para enlazar a un mensaje de correo electrónico existente y recuperar la colección de datos adjuntos.
Usar el método AttachmentCollection.Clear para eliminar todos los datos adjuntos del correo electrónico.
Usar el método EmailMessage.Update para guardar los cambios.
En este ejemplo se supone que el servicio es un objeto ExchangeService válido, itemId es el ItemId del mensaje desde el que se eliminarán los datos adjuntos y que el usuario se ha autenticado en un servidor exchange.
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);
}
Eliminación de datos adjuntos por nombre de un correo electrónico mediante la API administrada de EWS
En el ejemplo de código siguiente se muestra cómo eliminar datos adjuntos por su nombre:
Usar el método EmailMessage.Bind para enlazar a un mensaje de correo electrónico existente y recuperar la colección de datos adjuntos.
Usar el método AttachmentCollection.Remove para eliminar datos adjuntos denominados FileAttachment.txt.
Usar el método EmailMessage.Update para guardar los cambios.
En este ejemplo se supone que el servicio es un objeto ExchangeService válido, itemId es el ItemId del mensaje desde el que se eliminarán los datos adjuntos y que el usuario se ha autenticado en un servidor exchange.
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);
}
Eliminación de datos adjuntos por posición mediante la API administrada de EWS
En el ejemplo de código siguiente se muestra cómo eliminar datos adjuntos por posición:
Usar el método EmailMessage.Bind para enlazar a un mensaje de correo electrónico existente y recuperar la colección de datos adjuntos y la propiedad EmailMessage.HasAttachments .
Usar el método AttachmentCollection.Remove para eliminar los primeros datos adjuntos de la colección.
Usar el método EmailMessage.Update para guardar los cambios.
En este ejemplo se supone que el servicio es un objeto ExchangeService válido, itemId es el ItemId del mensaje desde el que se eliminarán los datos adjuntos y que el usuario se ha autenticado en un servidor exchange.
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);
}
Eliminación de datos adjuntos de un elemento mediante EWS
Para eliminar datos adjuntos mediante EWS, primero debe recuperar el mensaje y la colección de datos adjuntos para determinar el AttachmentId (GetAttachment y DeleteAttachment) de los datos adjuntos que se van a eliminar. Después de eliminar uno o varios valores de AttachmentId , llame a la operación DeleteAttachment para quitar los datos adjuntos especificados del mensaje.
En el ejemplo de código siguiente se muestra cómo usar la operación GetItem para obtener un mensaje de correo electrónico y la colección de datos adjuntos en el mensaje. Esta es también la primera solicitud XML que envía la API administrada de EWS cuando se usa la API administrada de EWS para eliminar todos los datos adjuntos de un correo electrónico. Los valores de algunos atributos se acortan para mejorar la legibilidad.
<?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>
El servidor responde a la solicitud GetItem con un mensaje GetItemResponse que incluye un valor ResponseCode de NoError, que indica que el correo electrónico se recuperó correctamente y los valores de AttachmentId de los datos adjuntos existentes.
<?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>
Después de determinar qué datos adjuntos se van a eliminar, llame a la operación DeleteAttachment e incluya los valores de AttachmentId de los datos adjuntos que se van a eliminar.
<?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>
El servidor responde a la solicitud DeleteAttachment con un mensaje DeleteAttachmentResponse que incluye un valor ResponseCode de NoError para cada DeleteAttachmentResponseMessage, lo que indica que cada dato adjunto se eliminó correctamente. Los valores de algunos atributos se acortan para mejorar la legibilidad.
<?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>