Compartir a través de


Exportar elementos mediante EWS en Exchange

Obtenga información sobre cómo exportar citas, correos electrónicos, tareas y otros elementos mediante la API administrada de EWS o EWS en Exchange.

Puede exportar elementos desde Exchange mediante la API administrada de EWS o EWS de varias maneras diferentes. La opción que use depende de:

  • El tipo de elemento que se exporte.

  • El grado de fidelidad que desee mantener entre el estado del elemento en Exchange y el elemento exportado.

  • El formato del elemento exportado.

  • Los requisitos posteriores al procesamiento.

  • Si desea volver a importar el elemento a Exchange.

En este artículo se muestra cómo usar cada una de las distintas opciones para exportar elementos. Puede usar cualquier opción para exportar elementos por lotes desde Exchange.

Exportar un elemento en un formato personalizado

Puede usar los resultados de una llamada al método de LA API administrada de EWS Item.Bind o analizar los resultados de una operación EWS GetItem en un formato que funcione con los requisitos de la aplicación. Use esta opción cuando exporte elementos para importarlos a una base de datos, .un archivo .csv u otro formato o sistema. Incluso puede guardar el elemento en el formulario del elemento XML de EWS, lo que puede ser útil porque muchos sistemas tienen capacidad de análisis XML. Se recomienda usar el método Item.Bind o la operación GetItem (sin la propiedad Item.MimeContent), porque esta opción le proporciona control sobre las propiedades que se exportan.

Exportar elementos con total fidelidad

Si desea exportar elementos con plena fidelidad, puede usar la operación de EWS ExportItems. La operación ExportItems exporta cada elemento como un flujo de datos. Este flujo de datos no se puede analizar, pero se puede usar como una copia de seguridad de nivel de elemento que se puede importar de nuevo a un buzón de Exchange. Puede incluir muchos elementos en cada solicitud ExportItems, aunque no se recomienda incluir más de 100 elementos en cada llamada. Dado que la API administrada de EWS no implementa la operación ExportItems, si usa la API administrada de EWS, deberá escribir una rutina para enviar las solicitudes web. Opcionalmente, puede usar el método Item.Bind para obtener metadatos sobre el elemento, de modo que pueda indizar y almacenar información sobre el flujo de datos.

Se recomienda usar la operación ExportItems para exportar elementos que quiera importar a un buzón de Exchange.

En el ejemplo siguiente se muestra cómo usar la operación ExportItems. En este ejemplo, el identificador del elemento se abrevia para que sea más legible.

<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
      xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
      xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2013"/>
  </soap:Header>
  <soap:Body>
    <m:ExportItems>
      <m:ItemIds>
        <t:ItemId Id="AAMkAGYzZjZmRiUsidkC+NAAAAY89GAAA="/>
      </m:ItemIds>
    </m:ExportItems>
  </soap:Body>
</soap:Envelope>

El servidor responde a la solicitud ExportItems con un elemento ExportItemsResponse que incluye un valor de elemento ResponseCode de NoError, que indica que el elemento se ha exportado correctamente. La respuesta también incluye el identificador de elemento del elemento exportado y el flujo de datos con el contenido exportado. En el ejemplo siguiente se muestra el cuerpo SOAP que contiene el elemento exportado.

<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <m:ExportItemsResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
                         xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
    <m:ResponseMessages>
      <m:ExportItemsResponseMessage ResponseClass="Success">
        <m:ResponseCode>NoError</m:ResponseCode>
        <m:ItemId Id="AAMkAGYzZjZmRiUsidkC+NAAAAY89GAAA=" ChangeKey="FwAAAA=="/>
        <m:Data>
          AQAAAAgAAAAAAAAALgBlAHgAdABlAHMAdAAuAG0AaQBjAHIAbwBzAG8AZgB0AC4A
          cgAyAEAAYQB1AGoAaQBuAGcALQBkAG8AbQAuAGUAeAB0AGUAcwB0AC4AbQBpAGMAcgBvAHMA
          bwBmAHQALgBjAG8AbQAAAAMAADkAAAAAAwD+DwYAAAADAARAAwACQAMADkA=
        </m:Data>
      </m:ExportItemsResponseMessage>
     </m:ResponseMessages>
  </m:ExportItemsResponse>
</s:Body>

Usar la secuencia MIME para exportar a formatos de archivo comunes

Puede usar el método de API administrada de EWS Item.Bind o la operación de EWS GetItem para obtener una representación MIME de un elemento. Como Exchange no almacena el contenido MIME de cada elemento, tiene que convertir la representación de base de datos de cada elemento en la secuencia MIME. Dado que esta conversión es costosa, no se recomienda solicitar la secuencia MIME para elementos a gran escala. Tenga en cuenta también que la secuencia MIME contiene un conjunto limitado de propiedades; es posible que deba tener en cuenta otras opciones si el conjunto de propiedades no contiene las propiedades que necesita.

Usar la API administrada de EWS para exportar un correo electrónico a un archivo .eml y .mht mediante la secuencia MIME

Outlook y otras aplicaciones de correo electrónico comunes pueden abrir el formato de archivo EML (.eml). En el ejemplo siguiente se muestra cómo exportar un correo electrónico mediante la secuencia MIME y cómo usar la secuencia MIME para crear un archivo EML y un archivo MIME HTML (.mht). Muchos exploradores web admiten el formato de archivo MIME HTML. En este ejemplo se supone que service es un objeto ExchangeService válido y que el usuario se ha autenticado en un servidor Exchange.

private static void ExportMIMEEmail(ExchangeService service)
{
    Folder inbox = Folder.Bind(service, WellKnownFolderName.Inbox);
    ItemView view = new ItemView(1);
    view.PropertySet = new PropertySet(BasePropertySet.IdOnly);
    // This results in a FindItem call to EWS.
    FindItemsResults<Item> results = inbox.FindItems(view);
    foreach (var item in results)
    { 
        PropertySet props = new PropertySet(EmailMessageSchema.MimeContent);
        // This results in a GetItem call to EWS.
        var email = EmailMessage.Bind(service, item.Id, props);
                
        string emlFileName = @"C:\export\email.eml";
        string mhtFileName = @"C:\export\email.mht";
        // Save as .eml.
        using (FileStream fs = new FileStream(emlFileName, FileMode.Create, FileAccess.Write))
        {
            fs.Write(email.MimeContent.Content, 0, email.MimeContent.Content.Length);
        }
        // Save as .mht.
        using (FileStream fs = new FileStream(mhtFileName, FileMode.Create, FileAccess.Write))
        {
            fs.Write(email.MimeContent.Content, 0, email.MimeContent.Content.Length);
        }
    }
}

Usar la API administrada de EWS para exportar una cita a un archivo iCal mediante la secuencia MIME

Outlook y otras aplicaciones de calendario comunes pueden abrir el formato de archivo iCal (.ics). En el ejemplo siguiente se muestra cómo exportar una cita mediante la secuencia MIME y cómo usar la secuencia MIME para crear un archivo iCal. Tenga en cuenta que muchas propiedades no se exportan con la secuencia MIME, incluidos los asistentes y las propiedades relacionadas con los datos adjuntos. Puede capturar otras propiedades de EWS solicitándolas y guardándolas en el archivo iCal como extensiones privadas. Estas extensiones privadas tienen el prefijo "x-".

En este ejemplo se supone que service es un objeto ExchangeService válido y que el usuario se ha autenticado en un servidor Exchange. En este ejemplo también se supone que tiene una cita con el asunto "Proyecciones financieras 2015" en la carpeta de calendario.

private static void ExportMIMEAppointment(ExchangeService service)
{
    Folder inbox = Folder.Bind(service, WellKnownFolderName.Calendar);
    ItemView view = new ItemView(1);
    view.PropertySet = new PropertySet(BasePropertySet.IdOnly); 
    // This results in a FindItem call to EWS.
    FindItemsResults<Item> results = inbox.FindItems("subject:'2015 Financial Projections'", view);
    foreach (var item in results)
    {
        PropertySet props = new PropertySet(AppointmentSchema.MimeContent);
        // This results in a GetItem call to EWS.
        var email = Appointment.Bind(service, item.Id, props);
        string iCalFileName = @"C:\export\appointment.ics";
        // Save as .ics.
        using (FileStream fs = new FileStream(iCalFileName, FileMode.Create, FileAccess.Write))
        {
            fs.Write(email.MimeContent.Content, 0, email.MimeContent.Content.Length);
        }
    }
}

Usar la API administrada de EWS para exportar un contacto a un archivo vCard mediante la secuencia MIME

Outlook y otras aplicaciones comunes de administración de contactos pueden abrir el formato de archivo vCard (.vcf). En el ejemplo siguiente se muestra cómo exportar un contacto mediante la secuencia MIME y cómo usar la secuencia MIME para crear una vCard. Puede capturar otras propiedades de EWS solicitándolas y guardándolas en el archivo vCard como extensiones privadas. Estas extensiones tienen el prefijo "x-".

En este ejemplo se supone que service es un objeto ExchangeService válido y que el usuario se ha autenticado en un servidor Exchange.

private static void ExportMIMEContact(ExchangeService service)
{
    Folder inbox = Folder.Bind(service, WellKnownFolderName.Contacts);
    ItemView view = new ItemView(1);
    view.PropertySet = new PropertySet(BasePropertySet.IdOnly);
    // This results in a FindItem call to EWS.
    FindItemsResults<Item> results = inbox.FindItems(view);
    foreach (var item in results)
    {
        PropertySet props = new PropertySet(ContactSchema.MimeContent);
        // This results in a GetItem call to EWS.
        var email = Contact.Bind(service, item.Id, props);
        string vcfFileName = @"C:\export\contact.vcf";
        // Save as .vcf.
        using (FileStream fs = new FileStream(vcfFileName, FileMode.Create, FileAccess.Write))
        {
            fs.Write(email.MimeContent.Content, 0, email.MimeContent.Content.Length);
        }
    }
}

Nota:

No se pueden importar archivos vCard mediante la propiedad MimeContent. Puede importar contactos mediante el método de la API administrada de EWS Contact.Save o la operación de EWS CreateItem.

Usar EWS para exportar un elemento mediante la secuencia MIME

Use la operación GetItem para obtener la secuencia MIME de un elemento. La siguiente solicitud GetItem muestra cómo solicitar el contenido MIME de un elemento.

<?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:GetItem>
      <m:ItemShape>
        <t:BaseShape>IdOnly</t:BaseShape>
        <t:IncludeMimeContent>true</t:IncludeMimeContent>
      </m:ItemShape>
      <m:ItemIds>
        <t:ItemId Id="AAMkADEzYjJkLTYxMwB8GqYicWAAA=" ChangeKey="CQAAABzXv"/>
      </m:ItemIds>
    </m:GetItem>
  </soap:Body>
</soap:Envelope>

En el ejemplo siguiente se muestra la respuesta a una solicitud para obtener la secuencia MIME. La secuencia MIME se ha acortado para mejorar la legibilidad.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15" 
                         MinorVersion="0" 
                         MajorBuildNumber="893" 
                         MinorBuildNumber="17" 
                         Version="V2_10" 
                         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:MimeContent CharacterSet="UTF-8">UmVjZ6IGZyb2b2suY29y5hMzgwZTA1YtDQo=</t:MimeContent>
              <t:ItemId Id="AAMkADEzYjJkLTYxMwB8GqYicWAAA=" ChangeKey="CQAAABzXv"/>
            </t:Message>
          </m:Items>
        </m:GetItemResponseMessage>
      </m:ResponseMessages>
    </m:GetItemResponse>
  </s:Body>
</s:Envelope>

Después de exportar elementos, es posible que desee importar elementos a Exchange.

Recursos adicionales