Partilhar via


Expandir grupos de distribuição usando o EWS no Exchange 2013

Saiba como expandir um grupo de distribuição usando a API Gerenciada do EWS ou o EWS no Exchange.

Você pode usar o método de API Gerenciada do ExchangeService.ExpandGroup EWS ou a operação ExpandDL EWS para expandir um grupo de distribuição para identificar todos os destinatários.

Como o método ExpandGroup está sobrecarregado, você pode chamá-lo de várias maneiras:

Expandir um grupo de distribuição universal ou um grupo de segurança usando a API Gerenciada do EWS

O exemplo a seguir mostra como expandir um grupo de distribuição universal ou um grupo de segurança usando um endereço de email, que é a abordagem mais simples. Esse exemplo pressupõe que serviço seja um objeto ExchangeService válido e que o usuário tenha sido autenticado em um servidor Exchange.

// Return the expanded group.
   ExpandGroupResults myGroupMembers = service.ExpandGroup("employees@contoso.com");
// Display the group members.
   foreach (EmailAddress address in myGroupMembers.Members)
   {
      Console.WriteLine("Email Address: {0}", address);
   }

Isso não é muito código, mas também é bem básico e pode não dar o que você está procurando. Então vamos dar um passo adiante. Grupos de distribuição também podem conter outros grupos de distribuição. Simplesmente expandi-lo produzirá o endereço de email dos grupos de distribuição contidos, mas não os expandirá. Ao adicionar mais algumas linhas de código, você pode expandir recursivamente os grupos para gerar todos os contatos.

private static void ExpandDistributionLists(ExchangeService service, string Mailbox)
{
   // Return the expanded group.
      ExpandGroupResults myGroupMembers = service.ExpandGroup(Mailbox);
   // Display the group members.
      foreach (EmailAddress address in myGroupMembers.Members)
      {
         // Check to see if the mailbox is a public group
         if (address.MailboxType == MailboxType.PublicGroup)
      {
         // Call the function again to expand the contained
         // distribution group.
         ExpandDistributionLists(service, address.Address);
      }
      else
      {
         // Output the address of the mailbox.
         Console.WriteLine("Email Address: {0}", address);
      }
   }
}

E agora você pode chamar essa nova função no código e expandir todos os grupos de distribuição públicos contidos no primeiro.

ExpandDistributionLists(service, "employees@contoso.com");

Expandir um grupo de contatos usando a API Gerenciada do EWS

Como os grupos de contato não têm um endereço de email associado, você precisa expandir o grupo com base no ItemId usando o método ExpandGroup(ItemId ). Você pode criar uma função, conforme mostrado no exemplo anterior, e alterar o segundo tipo de parâmetro de uma cadeia de caracteres para um ItemId.

private static void ExpandContactGroup(ExchangeService service, ItemId groupID)
{
   // Return the expanded group.
      ExpandGroupResults myGroupMembers = service.ExpandGroup(groupID);
   // Display the group members.
      foreach (EmailAddress address in myGroupMembers.Members)
      {
         if (address.MailboxType == MailboxType.PublicGroup)
         {
            ExpandDistributionLists(service, address.Address);
         }
         else
         {
            Console.WriteLine("Email Address: {0}", address);
         }
      }
}

Agora você pode chamar essa função usando o objeto de serviço exchange e o ItemId do grupo de contatos. Observe que o ItemId no exemplo é abreviado para legibilidade.

ExpandContactGroup(service, new ItemId("AAMkADBlY…");

Expandir um grupo de distribuição universal ou um grupo de segurança usando o EWS

O exemplo a seguir mostra a mensagem de solicitação XML enviada do cliente para o servidor quando você usa a operação ExpandDL . Essa também é a solicitação XML que a API Gerenciada do EWS envia quando você usa a API Gerenciada do EWS para expandir um grupo de distribuição universal.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/"
               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
  <soap:Body>
    <ExpandDL xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
              xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <Mailbox>
        <t:EmailAddress>employees@contoso.com</t:EmailAddress>
      </Mailbox>
    </ExpandDL>
  </soap:Body>
</soap:Envelope>

O exemplo a seguir mostra a mensagem de resposta XML enviada do servidor para o cliente. Observe que as caixas de correio e os grupos de distribuição universais são retornados.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ExpandDLResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                      xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ResponseMessages xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
    <ExpandDLResponseMessage ResponseClass="Success">
      <ResponseCode>NoError</ResponseCode>
      <DLExpansion IncludesLastItemInRange="true" TotalItemsInView="4">
        <Mailbox xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
          <Name>Sadie Daniels</Name>
          <EmailAddress>sadie@contoso.com</EmailAddress>
          <RoutingType>SMTP</RoutingType>
          <MailboxType>Mailbox</MailboxType>
        </Mailbox>
        <Mailbox xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
          <Name>Alfred Welker</Name>
          <EmailAddress>alfred@contoso.com</EmailAddress>
          <RoutingType>SMTP</RoutingType>
          <MailboxType>Mailbox</MailboxType>
        </Mailbox>
        <Mailbox xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
          <Name>Contoso Sales</Name>
          <EmailAddress>sales@contoso.com</EmailAddress>
          <RoutingType>SMTP</RoutingType>
          <MailboxType>PublicDL</MailboxType>
        </Mailbox>
        <Mailbox xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
          <Name>Contoso Support</Name>
          <EmailAddress>support@contoso.com</EmailAddress>
          <RoutingType>SMTP</RoutingType>
          <MailboxType>PublicDL</MailboxType>
        </Mailbox>
      </DLExpansion>
    </ExpandDLResponseMessage>
  </ResponseMessages>
</ExpandDLResponse>
</s:Body>
</s:Envelope>

Ao contrário de quando você usa a API Gerenciada do EWS, quando usa o EWS para expandir um grupo de distribuição universal, não é possível expandir recursivamente os grupos de distribuição retornados. Você precisará enviar uma solicitação adicional para expandir cada um dos grupos de distribuição incluídos na resposta.

Expandir um grupo de contatos usando o EWS

A solicitação XML para expandir um grupo de contatos é semelhante a uma solicitação para expandir um grupo de distribuição. Em vez de um endereço de email, você usa o ItemId do grupo de contatos. O ItemId neste exemplo é abreviado para legibilidade.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/"
               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
  <soap:Body>
    <ExpandDL xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
              xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <Mailbox>
         <ItemId xmlns="http://schemas.microsoft.com/exchange/services/2006/types" Id="AAMkADBlY…" />
      </Mailbox>
    </ExpandDL>
  </soap:Body>
</soap:Envelope>

A estrutura da resposta XML a uma solicitação para expandir um grupo de contatos é a mesma que a resposta a uma solicitação para expandir um grupo de distribuição universal.

Confira também