Excluir itens usando o EWS no Exchange

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

Muitos sistemas contêm compromissos, emails, contatos e tarefas e você pode importar esses itens para o Exchange de várias maneiras diferentes. Importar itens para o Exchange é simples quando as relações de caixa de correio não são mantidas nesses itens. Você pode usar o método de API Gerenciada do Item.Save EWS ou a operação CreateItem EWS para criar os itens em uma caixa de correio do Exchange. No entanto, a abordagem simples não dá suporte a todos os cenários; por exemplo:

  • Você não pode manter a relação entre organizadores e participantes ao importar compromissos com participantes (reuniões). Isso significa que o organizador da reunião precisará reenviar convites de reunião aos participantes para restabelecer a relação entre o organizador e os participantes. Se o compromisso foi importado para o calendário de um participante, o compromisso não estará relacionado à nomeação do organizador da reunião. Os participantes precisarão aceitar o convite de reunião ressentido do organizador para restabelecer a relação organizador-participante.

  • As informações sobre os atribuidores não são preservadas quando as tarefas atribuídas são importadas.

Todas as opções de importação podem ser usadas para importar itens em lote para o Exchange.

Usar tipos de item da API Gerenciada do EWS ou do EWS para importar um item

Você pode usar a API Gerenciada do EWS ou o EWS para importar emails, contatos, compromissos ou tarefas de outros sistemas. Basta definir as propriedades do formato de origem em qualquer um dos objetos a seguir, dependendo do que você está importando.

Tabela 1. Objetos EWS Managed API e elementos EWS

Objeto API Gerenciada do EWS Elemento EWS
EmailMessage
Mensagem
Contato
Contato
Compromisso
CalendarItem
Tarefa
Tarefa

Use o método de API Gerenciada do Item.Save EWS ou a operação CreateItem EWS para executar a importação de itens. Recomendamos essa abordagem ao importar itens de outros sistemas porque você tem controle sobre quais propriedades são importadas. Para obter mais informações sobre como definir propriedades em itens e salvar o item, consulte Criar um item usando a API Gerenciada do EWS ou Criar um item usando o EWS.

Importar itens com fidelidade total

Você pode usar a operação EWS UploadItems para carregar um item como um fluxo de dados. Essa representação de fluxo de dados de um item deve vir dos resultados de uma chamada de operação ExportItems . Como a API Gerenciada do EWS não implementa a operação UploadItems , se você usar a API Gerenciada do EWS, precisará gravar uma rotina para enviar as solicitações da Web.

Essa é a maneira mais fácil de importar itens que foram exportados de outro servidor exchange.

No exemplo a seguir, os identificadores e o conteúdo do elemento Data são abreviados para legibilidade.

<?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="https://schemas.xmlsoap.org/soap/envelope/"
      xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types"
      xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2013_SP1"/>
  </soap:Header>
  <soap:Body>
    <m:UploadItems>
      <m:Items>
        <t:Item CreateAction="CreateNew">
          <t:ParentFolderId  Id="AAMkADEzOTE7kV0AAA=" ChangeKey="AQAAAA=="/>
          <t:Data>AQAAAAgAAAAAAQAAAAADABZADQASDkANABMO</t:Data>
        </t:Item>
      </m:Items>
    </m:UploadItems>
  </soap:Body>
</soap:Envelope>

O servidor responde à solicitação UploadItems com um elemento UploadItemsResponse que inclui um valor de elemento ResponseCode do NoError, que indica que o item foi carregado com êxito. A resposta também inclui a ID do item carregado.

Usar o fluxo MIME para importar de formatos de arquivo comuns

O EWS pode importar arquivos EML (.eml) e iCal (.ics). Você deseja testar seu conteúdo MIME para ver como o analisador do Exchange MIME lida com o conteúdo do fluxo MIME. Embora o uso do fluxo MIME seja conveniente, normalmente é melhor usar tipos de item da API Gerenciada do EWS ou do EWS para importar um item. Aqui está um exemplo de como importar um vCard.

Use a API Gerenciada do EWS para importar um email de um arquivo EML usando o fluxo MIME

O exemplo a seguir mostra como definir a propriedade MimeContent com o conteúdo de um arquivo EML e importar o email para uma caixa de correio. Este exemplo também mostra como definir a propriedade estendida PidTagMessageFlags (0x0E07) em um email importado para que ela não apareça na caixa de correio como um item de rascunho. 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 UploadMIMEEmail(ExchangeService service)
{
    EmailMessage email = new EmailMessage(service);
    
    string emlFileName = @"C:\import\email.eml";
    using (FileStream fs = new FileStream(emlFileName, FileMode.Open, FileAccess.Read))
    {
        byte[] bytes = new byte[fs.Length];
        int numBytesToRead = (int)fs.Length;
        int numBytesRead = 0;
        while (numBytesToRead > 0)
        {
            int n = fs.Read(bytes, numBytesRead, numBytesToRead);
            if (n == 0)
                break;
            numBytesRead += n;
            numBytesToRead -= n;
        }
        // Set the contents of the .eml file to the MimeContent property.
        email.MimeContent = new MimeContent("UTF-8", bytes);
    }
    
    // Indicate that this email is not a draft. Otherwise, the email will appear as a 
    // draft to clients.
    ExtendedPropertyDefinition PR_MESSAGE_FLAGS_msgflag_read = new ExtendedPropertyDefinition(3591, MapiPropertyType.Integer);
    email.SetExtendedProperty(PR_MESSAGE_FLAGS_msgflag_read, 1);
    // This results in a CreateItem call to EWS. The email will be saved in the Inbox folder.
    email.Save(WellKnownFolderName.Inbox);
}

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

Você pode importar compromissos simples na forma de arquivos iCalendar usando o fluxo MIME. Você não pode importar reuniões, que são compromissos com os participantes, porque a relação entre organizadores de reunião e participantes precisa ser definida como parte do fluxo de trabalho de calendário do Exchange . Os participantes não podem ser capturados no fluxo MIME.

O exemplo de código a seguir mostra como importar um arquivo .ics simples para a caixa de correio de um usuário.

private static void UploadMIMEAppointment(ExchangeService service)
{
    Appointment appointment = new Appointment(service);
    string iCalFileName = @"C:\import\appointment.ics";
    using (FileStream fs = new FileStream(iCalFileName, FileMode.Open, FileAccess.Read))
    {
        byte[] bytes = new byte[fs.Length];
        int numBytesToRead = (int)fs.Length;
        int numBytesRead = 0;
        while (numBytesToRead > 0)
        {
            int n = fs.Read(bytes, numBytesRead, numBytesToRead);
            if (n == 0)
                break;
            numBytesRead += n;
            numBytesToRead -= n;
        }
        // Set the contents of the .ics file to the MimeContent property.
        appointment.MimeContent = new MimeContent("UTF-8", bytes);
    }
    // This results in a CreateItem call to EWS. 
    appointment.Save(WellKnownFolderName.Calendar);
}

Use o EWS para importar um item usando o fluxo MIME

Você pode usar a operação CreateItem EWS para importar itens EML e iCal usando seu fluxo MIME.

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/"
               xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2013_SP1" />
    <t:MailboxCulture>en-US</t:MailboxCulture>
  </soap:Header>
  <soap:Body >
    <m:CreateItem>
      <m:SavedItemFolderId>
        <t:DistinguishedFolderId Id="inbox"/>
      </m:SavedItemFolderId> 
        <m:Items>
        <t:Message>
          <t:MimeContent CharacterSet="UTF-8">
            <!-- Insert MIME content here-->
          </t:MimeContent>
        </t:Message>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

Próximas etapas

Depois de importar itens para uma caixa de correio, talvez você queira criar uma pasta personalizada para armazenar seus itens importados ou sincronizar seus itens de cliente e caixa de correio.

Confira também