Accéder aux contacts en tant que délégué à l’aide d’EWS dans Exchange

Découvrez comment accéder aux contacts en tant que délégué à l’aide de l’API managée EWS ou EWS dans Exchange.

Vous pouvez utiliser l’API managée EWS ou EWS pour accorder à un utilisateur l’accès au dossier Contacts d’un propriétaire de boîte aux lettres. Le délégué peut ensuite créer des contacts pour le compte du propriétaire de la boîte aux lettres, puis récupérer, mettre à jour et supprimer des contacts du dossier Contacts du propriétaire de la boîte aux lettres, en fonction de ses autorisations.

En tant que délégué, vous utilisez les mêmes méthodes et opérations pour accéder au dossier Contacts d’un propriétaire de boîte aux lettres que vous utilisez pour accéder à votre propre dossier Contacts. La principale différence est que vous devez utiliser l’accès explicite pour rechercher ou créer un élément de contact, puis après avoir identifié l’ID de l’élément, vous pouvez utiliser l’accès implicite pour obtenir, mettre à jour ou supprimer l’élément.

Tableau 1. Méthodes d’API managée EWS et opérations EWS pour accéder à un contact en tant que délégué

Si vous voulez... Utilisez cette méthode d’API gérée EWS... Utilisez cette opération EWS...
Créer un contact en tant que délégué
Item.Save où le paramètre FolderId fournit un accès explicite au dossier Contacts du propriétaire de la boîte aux lettres
CreateItem où l’élément Boîte aux lettres spécifie l’Adresse de courrier du propriétaire de la boîte aux lettres
Créer plusieurs contacts en tant que délégué
ExchangeService.CreateItems où le paramètre FolderId fournit un accès explicite au dossier Contacts du propriétaire de la boîte aux lettres
CreateItem où l’élément Boîte aux lettres spécifie l’Adresse de courrier du propriétaire de la boîte aux lettres
Résoudre un contact en tant que délégué
ExchangeService.ResolveName où le paramètre FolderId fournit un accès explicite au dossier Contacts du propriétaire de la boîte aux lettres
ResolveNames où l’élément Mailbox spécifie l’Adresse e-mail du propriétaire de la boîte aux lettres
Rechercher ou rechercher un contact en tant que délégué
ExchangeService.FindItems où le paramètre FolderId fournit un accès explicite au dossier Contacts du propriétaire de la boîte aux lettres
FindItem où l’élément Boîte aux lettres spécifie la propriété Adresse de courrier du propriétaire de la boîte aux lettres
Obtenir un contact en tant que délégué
Contact.Bind
GetItem
Mettre à jour un contact en tant que délégué
Contact.Bind suivi de Contact.Update
GetItem suivi de UpdateItem
Supprimer un contact en tant que délégué
Contact.Bind suivi de Contact.Delete
GetItem suivi de DeleteItem

Remarque

Dans les exemples de code de cet article, primary@contoso.com est le propriétaire de la boîte aux lettres.

Tâches préalables

Pour qu’un utilisateur puisse accéder au dossier Contacts du propriétaire de la boîte aux lettres en tant que délégué, l’utilisateur doit être ajouté en tant que délégué disposant d’autorisations sur le dossier Contacts du propriétaire de la boîte aux lettres.

Créer un contact en tant que délégué à l’aide de l’API managée EWS

L’API managée EWS vous permet d’utiliser l’objet de service pour l’utilisateur délégué afin de créer des contacts pour le propriétaire de la boîte aux lettres. Cet exemple montre comment utiliser la méthode Enregistrer pour créer une réunion et envoyer des demandes de réunion aux participants.

Cet exemple suppose que le service est un objet ExchangeService valide pour le délégué et que le délégué a reçu les autorisations appropriées pour le dossier Contacts du propriétaire de la boîte aux lettres.

 public static void DelegateAccessCreateContact(ExchangeService service)
{
    // Create the contact.
    Contact contact = new Contact(service);
    // Specify the name and how the contact should be filed.
    contact.GivenName = "Brian";
    contact.MiddleName = "David";
    contact.Surname = "Johnson";
    contact.FileAsMapping = FileAsMapping.SurnameCommaGivenName;
    // Specify the company name.
    contact.CompanyName = "Contoso";
    // Specify the business, home, and car phone numbers.
    contact.PhoneNumbers[PhoneNumberKey.BusinessPhone] = "425-555-0110";
    contact.PhoneNumbers[PhoneNumberKey.HomePhone] = "425-555-0120";
    contact.PhoneNumbers[PhoneNumberKey.CarPhone] = "425-555-0130";
    // Specify two email addresses.
    contact.EmailAddresses[EmailAddressKey.EmailAddress1] = 
        new EmailAddress("brian_1@contoso.com");
    contact.EmailAddresses[EmailAddressKey.EmailAddress2] = 
        new EmailAddress("brian_2@contoso.com");
    // Save the contact in the mailbox owner's Contacts folder.
    // This method call results in a CreateItem call to EWS. 
    // The contact identifier contains the context for the mailbox owner's 
    // Contact folder. Any additional actions take on this contact will 
    // be performed in the mailbox owner's mailbox. 
    contact.Save(new FolderId(WellKnownFolderName.Contacts, 
        "primary@contoso.com"));
    // Verify that the contact was created.
    // This method call results in a GetItem call to EWS
    // to load the display name property on the contact. 
    contact.Load(new PropertySet (ContactSchema.DisplayName));
    Console.WriteLine("\nContact created: " + contact.DisplayName + "\n");
}

Notez que lorsque vous enregistrez l’élément, l’appel de méthode Save doit identifier le dossier Contacts du propriétaire de la boîte aux lettres. Si le dossier Contacts du propriétaire de la boîte aux lettres n’est pas spécifié, la demande de réunion est enregistrée dans le dossier Contacts du délégué et non dans le dossier Contacts du propriétaire de la boîte aux lettres. Vous pouvez inclure le dossier Contacts du propriétaire de la boîte aux lettres dans l’appel de méthode Save de deux manières. Nous vous recommandons d’instancier une nouvelle instance de l’objet FolderId à l’aide de WellKnownFolderName et de l’adresse SMTP du propriétaire de la boîte aux lettres.

contact.Save(new FolderId(WellKnownFolderName.Contacts, "primary@contoso.com"));

Toutefois, vous pouvez également commencer par lier au dossier Contacts, puis utiliser l’ID du dossier dans l’appel de méthode Save . Notez toutefois que cela crée un appel EWS supplémentaire.

    // Identify the mailbox owner's SMTP address 
    // and bind to their Contacts folder.
    Mailbox primary = new Mailbox("primary@contoso.com"); 
    Folder primaryContacts = Folder.Bind(service, new FolderId(WellKnownFolderName.Contacts, primary)); 
…
    // Save the contact to the mailbox owner's Contacts folder.
    meeting.Save(primaryContacts.Id);

Créer un contact en tant que délégué à l’aide d’EWS

EWS vous permet d’utiliser l’objet de service pour l’utilisateur délégué afin de créer des éléments de contact pour le propriétaire de la boîte aux lettres. Cet exemple montre comment utiliser l’opération CreateItem pour créer un contact.

Il s’agit également de la requête XML que l’API managée EWS envoie lorsque vous utilisez la méthode Save pour créer un contact.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
  </soap:Header>
  <soap:Body>
    <m:CreateItem MessageDisposition="SaveOnly">
      <m:SavedItemFolderId>
        <t:DistinguishedFolderId Id="contacts">
          <t:Mailbox>
            <t:EmailAddress>primary@contoso.com</t:EmailAddress>
          </t:Mailbox>
        </t:DistinguishedFolderId>
      </m:SavedItemFolderId>
      <m:Items>
        <t:Contact>
          <t:FileAsMapping>LastCommaFirst</t:FileAsMapping>
          <t:GivenName>Brian</t:GivenName>
          <t:MiddleName>David</t:MiddleName>
          <t:CompanyName>Contoso</t:CompanyName>
          <t:EmailAddresses>
            <t:Entry Key="EmailAddress1">brian_1@contoso.com</t:Entry>
            <t:Entry Key="EmailAddress2">brian_2@contoso.com</t:Entry>
          </t:EmailAddresses>
          <t:PhoneNumbers>
            <t:Entry Key="BusinessPhone">425-555-0110</t:Entry>
            <t:Entry Key="HomePhone">425-555-0120</t:Entry>
            <t:Entry Key="CarPhone">425-555-0130</t:Entry>
          </t:PhoneNumbers>
          <t:Surname>Johnson</t:Surname>
        </t:Contact>
      </m:Items>
    </m:CreateItem>
  </soap:Body>
</soap:Envelope>

Le serveur répond à la requête CreateItem avec un message CreateItemResponse qui inclut une valeur d’élément ResponseCodenoError, ce qui indique que le contact a été créé avec succès. La réponse contient également l’ID d’élément du contact nouvellement créé.

Résoudre un contact en tant que délégué à l’aide de l’API managée EWS

Pour rechercher un contact basé sur un nom ou un terme éventuellement ambigu, vous devez utiliser l’une des méthodes ExchangeService.ResolveName qui inclut un paramètre FolderId , afin de pouvoir spécifier le dossier Contacts du propriétaire de la boîte aux lettres.

private static void DelegateAccessResolveContacts(ExchangeService service)
{
    // Create a list to store folders to search.
    List<FolderId> folders = new List<FolderId>();
   
    // Add the mailbox owner's folder to the list.
    folders.Add(new FolderId(WellKnownFolderName.Contacts, 
        "primary@contoso.com"));
    
    // Resolve the ambiguous name "Johnson".
    // This method call results in a ResolveNames call to EWS.
    NameResolutionCollection resolvedNames = service.ResolveName(
        "johnson", folders, ResolveNameSearchLocation.ContactsOnly, true);
    // Output the list of candidate email addresses and contact names.
    foreach (NameResolution nameRes in resolvedNames)
    {
        Console.WriteLine("Contact e-mail address: " + nameRes.Mailbox.Address);
        Console.WriteLine("Contact ID: " + nameRes.Mailbox.Id);
    }
}

Une fois que l’appel de méthode ResolveNames a retourné une réponse avec un ID, vous pouvez obtenir, mettre à jour ou supprimer le contact à l’aide de l’ID et de l’accès implicite, et vous n’avez pas besoin de spécifier l’adresse SMTP du propriétaire de la boîte aux lettres.

Résoudre un contact en tant que délégué à l’aide d’EWS

EWS vous permet d’utiliser l’objet de service pour l’utilisateur délégué afin de résoudre des noms partiels dans le dossier Contacts du propriétaire de la boîte aux lettres. Cet exemple montre comment utiliser l’opération ResolveNames pour rechercher des réunions dans le dossier Contacts du propriétaire de la boîte aux lettres qui contiennent le mot « johnson ».

Il s’agit également de la requête XML que l’API managée EWS envoie lorsque vous utilisez la méthode ResolveName pour résoudre un contact.

 <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types"
               xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <t:RequestServerVersion Version="Exchange2007_SP1" />
  </soap:Header>
  <soap:Body>
    <m:ResolveNames ReturnFullContactData="true"
                    SearchScope="Contacts">
      <m:ParentFolderIds>
        <t:DistinguishedFolderId Id="contacts">
          <t:Mailbox>
            <t:EmailAddress>primary@contoso.com</t:EmailAddress>
          </t:Mailbox>
        </t:DistinguishedFolderId>
      </m:ParentFolderIds>
      <m:UnresolvedEntry>johnson</m:UnresolvedEntry>
    </m:ResolveNames>
  </soap:Body>
</soap:Envelope>

Le serveur répond à la requête ResolveNames avec un message ResolveNamesResponse qui inclut une valeur d’élément ResponseCodenoError, qui indique que l’opération s’est terminée avec succès et n’a trouvé qu’un seul résultat, ou ErrorNameResolutionMultipleResults si plusieurs résultats ont été trouvés, ce qui est ce qui est indiqué dans le troisième exemple de code basé sur le contact Créer un contact en tant que délégué à l’aide de l’API managée EWS. La réponse contient également l’ItemId de chaque résultat.

La valeur de l’élément ItemId a été abrégée pour des raisons de lisibilité.

 <?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <h:ServerVersionInfo MajorVersion="15"
                         MinorVersion="0"
                         MajorBuildNumber="893"
                         MinorBuildNumber="17"
                         Version="V2_10"
                         xmlns:h="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="https://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>
    <m:ResolveNamesResponse xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
                            xmlns:t="https://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:ResolveNamesResponseMessage ResponseClass="Warning">
          <m:MessageText>Multiple results were found.</m:MessageText>
          <m:ResponseCode>ErrorNameResolutionMultipleResults</m:ResponseCode>
          <m:DescriptiveLinkKey>0</m:DescriptiveLinkKey>
          <m:ResolutionSet TotalItemsInView="2"
                           IncludesLastItemInRange="true">
            <t:Resolution>
              <t:Mailbox>
                <t:Name>brian_1@contoso.com</t:Name>
                <t:EmailAddress>brian_1@contoso.com</t:EmailAddress>
                <t:RoutingType>SMTP</t:RoutingType>
                <t:MailboxType>Contact</t:MailboxType>
                <t:ItemId Id="iMihAAA="
                          ChangeKey="EQAAABYAAADOilbYa8KaT7ZgMoTz2P+hAAABiPQo" />
              </t:Mailbox>
            </t:Resolution>
            <t:Resolution>
              <t:Mailbox>
                <t:Name>brian_2@contoso.com</t:Name>
                <t:EmailAddress>brian_2@contoso.com</t:EmailAddress>
                <t:RoutingType>SMTP</t:RoutingType>
                <t:MailboxType>Contact</t:MailboxType>
                <t:ItemId Id="iMihAAA="
                          ChangeKey="EQAAABYAAADOilbYa8KaT7ZgMoTz2P+hAAABiPQo" />
              </t:Mailbox>
            </t:Resolution>
          </m:ResolutionSet>
        </m:ResolveNamesResponseMessage>
      </m:ResponseMessages>
    </m:ResolveNamesResponse>
  </s:Body>
</s:Envelope>

Maintenant que vous disposez de l’ItemId pour les contacts qui correspondent au nom ambigu, vous pouvez obtenir, mettre à jour ou supprimer des éléments de contact en tant que délégué en utilisant EWS à l’aide de l’ItemId et de l’accès implicite, et vous n’avez pas besoin de spécifier l’adresse SMTP du propriétaire de la boîte aux lettres.

Obtenir, mettre à jour ou supprimer des éléments de contact en tant que délégué à l’aide de l’API managée EWS

Vous pouvez utiliser l’API managée EWS pour obtenir, mettre à jour ou supprimer un contact de la même façon que vous effectuez ces actions lorsque vous n’utilisez pas l’accès délégué. La seule différence est que l’objet du service est pour l’utilisateur délégué. L’ID d’élément inclus dans l’appel de méthode Bind identifie de manière unique l’élément dans le magasin de boîtes aux lettres, dans le dossier Contacts du propriétaire de la boîte aux lettres.

Tableau 2. Méthodes d’API managée EWS fonctionnant avec un contact en tant que délégué

Tâche Méthode d'API managée EWS Exemple de code
Obtenir une ressource contact
Lier
Obtention d’un élément à l’aide de l’API managée EWS
Mise à jour d'un contact
Lier suivi de Mettre à jour
Mise à jour d’un élément à l’aide de l’API managée EWS
Supprimer un contact
Lier suivi de Supprimer
Suppression d’un élément à l’aide de l’API managée EWS

Obtenir, mettre à jour ou supprimer des éléments de contact en tant que délégué à l’aide d’EWS

Vous pouvez utiliser EWS pour obtenir, mettre à jour ou supprimer un contact de réunion ou de rendez-vous de la même façon que vous effectuez ces actions lorsque vous n’utilisez pas l’accès délégué. La seule différence est que l’objet du service est pour l’utilisateur délégué. L’ID d’élément inclus dans la requête GetItem identifie de manière unique l’élément dans le magasin de boîtes aux lettres, dans le dossier Contacts du propriétaire de la boîte aux lettres.

Tableau 3. Opérations EWS pour travailler avec un contact en tant que délégué

Tâche Opération EWS Échantillon
Obtenir une ressource contact
GetItem
Obtention d’un élément à l’aide d’EWS
Mise à jour d'un contact
GetItem suivi de UpdateItem
Mise à jour d’un élément à l’aide d’EWS
Supprimer un contact
GetItem suivi de DeleteItem
Suppression d’un élément à l’aide d’EWS

Voir aussi