Exportar itens usando o EWS no Exchange

Saiba como exportar compromissos, emails, contatos, tarefas e outros itens usando a API Gerenciada do EWS ou o EWS no Exchange.

Você pode exportar itens de Exchange usando a API Gerenciada do EWS ou o EWS de várias maneiras diferentes. A opção que você usa depende de:

  • O tipo de item exportado.

  • O grau de fidelidade que você deseja manter entre o estado do item no Exchange e o item exportado.

  • O formato do item exportado.

  • Quaisquer requisitos de pós-processamento.

  • Se você deseja importar o item de volta para o Exchange.

Este artigo mostra como usar cada uma das diferentes opções para exportar itens. Você pode usar qualquer opção para exportar itens em lotes do Exchange.

Exportar um item para um formato personalizado

Você pode usar os resultados de uma chamada de método Item.Bind da API Gerenciada do EWS ou analisar os resultados de uma operação GetItem do EWS em um formato que funcione com seus requisitos de aplicativo. Use essa opção ao exportar itens para importá-los para um banco de dados, um arquivo .csv ou outro formato ou sistema. Você pode até salvar o item na forma do item EWS XML, o que pode ser útil porque muitos sistemas têm capacidade de análise XML. Recomendamos que você use o método Item.Bind ou a operação GetItem (sem a propriedade Item.MimeContent), pois essa opção oferece controle sobre quais propriedades são exportadas.

Exportar itens com fidelidade total

Se você quiser exportar itens com fidelidade total, poderá usar a operação ExportItems do EWS. A operação ExportItems exporta cada item como um fluxo de dados. Esse fluxo de dados não é para análise, mas pode ser usado como um backup no nível de item que pode ser importado de volta para uma caixa de correio do Exchange. Você pode incluir muitos itens em cada solicitação ExportItems, embora seja recomendável incluir no máximo 100 itens em cada chamada. Como a API Gerenciada do EWS não implementa a operação ExportItems, se você usar a API Gerenciada do EWS, precisará escrever uma rotina para enviar as solicitações da Web. Opcionalmente, você pode usar o método Item.Bind para obter metadados sobre o item para que você possa indexar e armazenar informações sobre o fluxo de dados.

Recomendamos que você use a operação ExportItems para exportar itens que você planeja importar para uma caixa de correio do Exchange.

O exemplo a seguir mostra como usar a operação ExportItems. Neste exemplo, o identificador de item é abreviado para facilitar a leitura.

<?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>

O servidor responde à solicitação ExportItems com um elemento ExportItemsResponse que inclui um valor de elemento ResponseCode de NoError, que indica que o item foi exportado com êxito. A resposta também inclui a ID do item exportado e o fluxo de dados que contém o conteúdo exportado. O exemplo a seguir mostra o corpo SOAP que contém o item 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 o fluxo MIME para exportar para formatos de arquivo comuns

Você pode usar o método Item.Bind da API Gerenciada do EWS ou a operação GetItem do EWS para obter uma representação MIME de um item. Como o Exchange não armazena o conteúdo MIME de cada item, ele precisa converter a representação de banco de dados de cada item no fluxo MIME. Como essa conversão é cara, não recomendamos que você solicite o fluxo MIME para itens em grande escala. Observe também que o fluxo MIME contém um conjunto limitado de propriedades; talvez seja necessário considerar outras opções se o conjunto de propriedades não contiver as propriedades de que você precisa.

Use a API Gerenciada do EWS para exportar um email para um arquivo .eml e .mht usando o fluxo MIME

O Outlook e outros aplicativos de email comuns podem abrir o formato de arquivo EML (.eml). O exemplo a seguir mostra como você pode exportar um email usando o fluxo MIME e usar o fluxo MIME para criar um arquivo EML e um arquivo MIME HTML (.mht). Muitos navegadores da Web suportam o formato de arquivo MIME HTML. Esse exemplo pressupõe que service seja um objeto ExchangeService válido e que o usuário tenha sido autenticado em um 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);
        }
    }
}

Use a API Gerenciada do EWS para exportar um compromisso para um arquivo iCal usando o fluxo MIME

O Outlook e outros aplicativos de calendário comuns podem abrir o formato de arquivo iCal (.ics). O exemplo a seguir mostra como exportar um compromisso usando o fluxo MIME e usar o fluxo MIME para criar um arquivo iCal. Observe que muitas propriedades não são exportadas com o fluxo MIME, incluindo participantes e propriedades relacionados a anexos. Você pode capturar outras propriedades do EWS solicitando-as e salvando-as no arquivo iCal como extensões privadas. Essas extensões privadas são prefixadas com "x-".

Esse exemplo pressupõe que service seja um objeto ExchangeService válido e que o usuário tenha sido autenticado em um servidor Exchange. Este exemplo também supõe que você tenha um compromisso com o assunto "Projeções Financeiras 2015" na pasta calendário.

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);
        }
    }
}

Use a API Gerenciada do EWS para exportar um contato para um arquivo vCard usando o fluxo MIME

O Outlook e outros aplicativos comuns de gerenciamento de contatos podem abrir o formato de arquivo vCard (.vcf). O exemplo a seguir mostra como exportar um contato usando o fluxo MIME e usar o fluxo MIME para criar um vCard. Você pode capturar outras propriedades do EWS solicitando-as e salvando-as no . vCard como extensões privadas. Essas extensões são prefixadas com "x-".

Esse exemplo pressupõe que service seja um objeto ExchangeService válido e que o usuário tenha sido autenticado em um 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);
        }
    }
}

Observação

Não é possível importar arquivos vCard usando a propriedade MimeContent. Você pode importar contatos usando o método Contact.Save da API Gerenciada do EWS ou a operação CreateItem do EWS.

Use o EWS para exportar qualquer item usando o fluxo MIME

Use a operação GetItem para obter o fluxo MIME de um item. A solicitação GetItem a seguir mostra como solicitar o conteúdo MIME de um item.

<?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>

O exemplo a seguir mostra a resposta a uma solicitação para obter o fluxo MIME. O fluxo MIME foi abreviado para facilitar a leitura.

<?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>

Depois de exportar itens, talvez você queira importar itens para o Exchange.

Confira também