Expansión de grupos de distribución mediante EWS en Exchange 2013

Obtenga información sobre cómo expandir un grupo de distribución mediante la API administrada de EWS o EWS en Exchange.

Puede usar el método de API administrada de EWS ExchangeService.ExpandGroup o la operación EWS ExpandDL para expandir un grupo de distribución para identificar a todos los destinatarios.

Dado que el método ExpandGroup está sobrecargado, puede llamarlo de varias maneras:

Expansión de un grupo de distribución universal o un grupo de seguridad mediante la API administrada de EWS

En el ejemplo siguiente se muestra cómo expandir un grupo de distribución universal o un grupo de seguridad mediante una dirección de correo electrónico, que es el enfoque más sencillo. En este ejemplo se supone que service es un objeto ExchangeService válido y que el usuario se ha autenticado en un 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);
   }

Eso no es mucho código, pero también es bastante básico y puede que no le dé lo que está buscando. Así que vamos a dar un paso más allá. Los grupos de distribución también pueden contener otros grupos de distribución. Simplemente expandirla generará la dirección de correo electrónico de los grupos de distribución contenidos, pero no los expandirá. Al agregar algunas líneas de código más, puede expandir de forma recursiva los grupos para generar cada contacto.

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

Y ahora puede llamar a esta nueva función en el código y expandir todos los grupos de distribución públicos incluidos en el primero.

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

Expansión de un grupo de contactos mediante la API administrada de EWS

Dado que los grupos de contactos no tienen una dirección de correo electrónico asociada, debe expandir el grupo en función del ItemId mediante el método ExpandGroup(ItemId). Puede crear una función, como se muestra en el ejemplo anterior, y cambiar el segundo tipo de parámetro de una cadena a un 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);
         }
      }
}

Ahora puede llamar a esta función mediante el objeto de servicio de Exchange y el ItemId del grupo de contactos. Tenga en cuenta que el ItemId del ejemplo se acorta para mejorar la legibilidad.

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

Expandir un grupo de distribución universal o un grupo de seguridad mediante EWS

En el ejemplo siguiente se muestra el mensaje de solicitud XML que se envía desde el cliente al servidor cuando se usa la operación ExpandDL . Esta es también la solicitud XML que la API administrada de EWS envía cuando se usa la API administrada de EWS para expandir un grupo de distribución universal.

<?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">
  <soap:Body>
    <ExpandDL xmlns="https://schemas.microsoft.com/exchange/services/2006/messages"
              xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types">
      <Mailbox>
        <t:EmailAddress>employees@contoso.com</t:EmailAddress>
      </Mailbox>
    </ExpandDL>
  </soap:Body>
</soap:Envelope>

En el ejemplo siguiente se muestra el mensaje de respuesta XML que se envía desde el servidor al cliente. Observe que se devuelven tanto buzones como grupos de distribución universal.

<?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="https://schemas.microsoft.com/exchange/services/2006/messages">
    <ExpandDLResponseMessage ResponseClass="Success">
      <ResponseCode>NoError</ResponseCode>
      <DLExpansion IncludesLastItemInRange="true" TotalItemsInView="4">
        <Mailbox xmlns="https://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="https://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="https://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="https://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>

A diferencia de cuando se usa la API administrada de EWS, cuando se usa EWS para expandir un grupo de distribución universal, no se pueden expandir de forma recursiva los grupos de distribución que se devuelven. Tendrá que enviar una solicitud adicional para expandir cada uno de los grupos de distribución incluidos en la respuesta.

Expandir un grupo de contactos mediante EWS

La solicitud XML para expandir un grupo de contactos es similar a una solicitud para expandir un grupo de distribución. En lugar de una dirección de correo electrónico, use el ItemId del grupo de contactos. El ItemId de este ejemplo se acorta para mejorar la legibilidad.

<?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">
  <soap:Body>
    <ExpandDL xmlns="https://schemas.microsoft.com/exchange/services/2006/messages"
              xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types">
      <Mailbox>
         <ItemId xmlns="https://schemas.microsoft.com/exchange/services/2006/types" Id="AAMkADBlY…" />
      </Mailbox>
    </ExpandDL>
  </soap:Body>
</soap:Envelope>

La estructura de la respuesta XML a una solicitud para expandir un grupo de contactos es la misma que la respuesta a una solicitud para expandir un grupo de distribución universal.

Vea también