Développer des groupes de distribution à l’aide d’EWS dans Exchange 2013

Découvrez comment développer un groupe de distribution à l’aide de l’API managée EWS ou EWS dans Exchange.

Vous pouvez utiliser la méthode d’API managée EWS ExchangeService.ExpandGroup ou l’opération ExpandDL EWS pour développer un groupe de distribution afin d’identifier tous les destinataires.

Étant donné que la méthode ExpandGroup est surchargée, vous pouvez l’appeler de plusieurs façons :

Développer un groupe de distribution universel ou un groupe de sécurité à l’aide de l’API managée EWS

L’exemple suivant montre comment développer un groupe de distribution universel ou un groupe de sécurité à l’aide d’une adresse e-mail, ce qui est l’approche la plus simple. Cet exemple suppose que le service est un objetExchangeService valide et que l’utilisateur a bien été authentifié pour un serveur 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);
   }

Ce n’est pas beaucoup de code, mais il est aussi assez basique et peut ne pas vous donner ce que vous recherchez. Passons donc un peu plus loin. Les groupes de distribution peuvent également contenir d’autres groupes de distribution. Le simple fait de l’étendre génère l’adresse e-mail des groupes de distribution contenus, mais pas de les développer. En ajoutant quelques lignes de code supplémentaires, vous pouvez développer de manière récursive les groupes pour générer chaque contact.

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

Vous pouvez maintenant appeler cette nouvelle fonction dans votre code et développer tous les groupes de distribution publics contenus dans le premier.

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

Développer un groupe de contacts à l’aide de l’API managée EWS

Étant donné que les groupes de contacts n’ont pas d’adresse e-mail associée, vous devez développer le groupe en fonction de l’ItemId à l’aide de la méthode ExpandGroup(ItemId). Vous pouvez créer une fonction, comme indiqué dans l’exemple précédent, et remplacer le deuxième type de paramètre d’une chaîne par 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);
         }
      }
}

Vous pouvez maintenant appeler cette fonction à l’aide de l’objet de service Exchange et de l’ItemId du groupe de contacts. Notez que l’ItemId de l’exemple est raccourci pour plus de lisibilité.

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

Développer un groupe de distribution universel ou un groupe de sécurité à l’aide d’EWS

L’exemple suivant montre le message de requête XML qui est envoyé du client au serveur lorsque vous utilisez l’opération ExpandDL . Il s’agit également de la requête XML que l’API managée EWS envoie lorsque vous utilisez l’API managée EWS pour développer un groupe de distribution universel.

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

L’exemple suivant montre le message de réponse XML envoyé du serveur au client. Notez que les boîtes aux lettres et les groupes de distribution universels sont retournés.

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

Contrairement à l’API managée EWS, lorsque vous utilisez EWS pour développer un groupe de distribution universel, vous ne pouvez pas développer de manière récursive les groupes de distribution retournés. Vous devez envoyer une demande supplémentaire pour développer chacun des groupes de distribution inclus dans la réponse.

Développer un groupe de contacts à l’aide d’EWS

La requête XML pour développer un groupe de contacts est similaire à une demande de développement d’un groupe de distribution. Au lieu d’une adresse e-mail, vous utilisez l’ItemId du groupe de contacts. L’ItemId de cet exemple est raccourci pour plus de lisibilité.

<?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 structure de la réponse XML à une demande de développement d’un groupe de contacts est identique à la réponse à une demande de développement d’un groupe de distribution universel.

Voir aussi