Accéder aux contacts en tant que délégué à l’aide d’EWS dans ExchangeAccess contacts as a delegate by using EWS in Exchange

Découvrez comment accéder aux contacts en tant que délégué à l’aide de l’API managée EWS ou d’EWS dans Exchange.Learn how to access contacts as a delegate by using the EWS Managed API or EWS in Exchange.

Vous pouvez utiliser l’API managée EWS ou EWS pour donner à un utilisateur l’accès au dossier contacts d’un propriétaire de boîte aux lettres.You can use the EWS Managed API or EWS to give a user access to a mailbox owner's Contacts folder. Le délégué peut ensuite créer des contacts pour le compte du propriétaire de la boîte aux lettres et récupérer, mettre à jour et supprimer des contacts du dossier contacts du propriétaire de la boîte aux lettres, en fonction de leurs autorisations.The delegate can then create contacts on behalf of the mailbox owner, and retrieve, update, and delete contacts from the mailbox owner's Contacts folder, depending on their permissions.

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 de contacts.As a delegate, you use the same methods and operations to access a mailbox owner's Contacts folder that you use to access your own Contacts folder. La principale différence réside dans le fait que vous devez utiliser un 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.The main difference is that you have to use explicit access to find or create a contact item, and then after you identify the item ID, you can use implicit access to get, update, or delete the item.

Tableau 1. Méthodes de l’API managée EWS et opérations EWS pour accéder à un contact en tant que déléguéTable 1. EWS Managed API methods and EWS operations for accessing a contact as a delegate

Si vous souhaitez...If you want to… Utilisez cette méthode d’API managée EWS...Use this EWS Managed API method… Utilisez cette opération EWS...Use this EWS operation…
Créer un contact en tant que déléguéCreate a contact as a delegate
Item. Save où le paramètre FolderId fournit un accès explicite au dossier contacts du propriétaire de la boîte aux lettresItem.Save where the FolderId parameter provides explicit access to the mailbox owner's Contacts folder
CreateItem où l’élément Mailbox spécifie le EmailAddress du propriétaire de la boîte aux lettresCreateItem where the Mailbox element specifies the EmailAddress of the mailbox owner
Créer plusieurs contacts en tant que déléguéCreate multiple contacts as a delegate
ExchangeService. CreateItems où le paramètre FolderId fournit un accès explicite au dossier contacts du propriétaire de la boîte aux lettresExchangeService.CreateItems where the FolderId parameter provides explicit access to the mailbox owner's Contacts folder
CreateItem où l’élément Mailbox spécifie le EmailAddress du propriétaire de la boîte aux lettresCreateItem where the Mailbox element specifies the EmailAddress of the mailbox owner
Résoudre un contact en tant que déléguéResolve a contact as a delegate
ExchangeService. ResolveName où le paramètre FolderId fournit un accès explicite au dossier contacts du propriétaire de la boîte aux lettresExchangeService.ResolveName where the FolderId parameter provides explicit access to the mailbox owner's Contacts folder
ResolveNames où l’élément Mailbox spécifie le EmailAddress du propriétaire de la boîte aux lettresResolveNames where the Mailbox element specifies the EmailAddress of the mailbox owner
Rechercher ou Rechercher un contact en tant que déléguéSearch for or find a contact as a delegate
ExchangeService. FindItems où le paramètre FolderId fournit un accès explicite au dossier contacts du propriétaire de la boîte aux lettresExchangeService.FindItems where the FolderId parameter provides explicit access to the mailbox owner's Contacts folder
FindItem où l’élément Mailbox spécifie le EmailAddress du propriétaire de la boîte aux lettresFindItem where the Mailbox element specifies the EmailAddress of the mailbox owner
Obtenir un contact en tant que déléguéGet a contact as a delegate
Contact. bindContact.Bind
GetItemGetItem
Mettre à jour un contact en tant que déléguéUpdate a contact as a delegate
Contact. bind suivi de contact. UpdateContact.Bind followed by Contact.Update
GetItem suivi de UpdateItemGetItem followed by UpdateItem
Supprimer un contact en tant que déléguéDelete a contact as a delegate
Contact. bind suivi de contact. DeleteContact.Bind followed by Contact.Delete
GetItem , suivi de DeleteItemGetItem followed by DeleteItem

Notes

Dans les exemples de code de cet article, primary@contoso.com est le propriétaire de la boîte aux lettres.In the code examples in this article, primary@contoso.com is the mailbox owner.

Tâches préalablesPrerequisite tasks

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é, il doit être ajouté en tant que délégué avec des autorisations sur le dossier contacts du propriétaire de la boîte aux lettres.Before a user can access the mailbox owner's Contacts folder as a delegate, the user must be added as a delegate with permissions to the mailbox owner's Contacts folder.

Créer un contact en tant que délégué à l’aide de l’API managée EWSCreate a contact as a delegate by using the EWS Managed API

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.The EWS Managed API enables you to use the service object for the delegate user to create contacts for the mailbox owner. Cet exemple montre comment utiliser la méthode Save pour créer une réunion et envoyer des demandes de réunion aux participants.This example shows how to use the Save method to create a meeting and send meeting requests to the attendees.

Cet exemple suppose que le service est un objet ExchangeService valide pour le délégué et que le délégué bénéficie des autorisations appropriées pour le dossier contacts du propriétaire de la boîte aux lettres.This example assumes that service is a valid ExchangeService object for the delegate and that the delegate has been granted the appropriate permissions for the mailbox owner's Contacts folder.

 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 la méthode Save doit identifier le dossier contacts du propriétaire de la boîte aux lettres.Note that when you save the item, the Save method call must identify the mailbox owner's Contacts folder. 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.If the mailbox owner's Contacts folder is not specified, the meeting request gets saved to the delegate's Contacts folder and not the mailbox owner's Contacts folder. Vous pouvez inclure le dossier contacts du propriétaire de la boîte aux lettres dans l’appel de la méthode Save de manière bidirectionnelle.You can include the mailbox owner's Contacts folder in the Save method call in two way. Nous vous recommandons d’instancier une nouvelle instance de l’objet FolderId à l’aide de l' WellKnownFolderName et de l’adresse SMTP du propriétaire de la boîte aux lettres.We recommend that you instantiate a new instance of the FolderId object by using the WellKnownFolderName and the SMTP address of the mailbox owner.

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

Toutefois, vous pouvez également établir une liaison avec le dossier contacts, puis utiliser l’ID du dossier dans l’appel de la méthode Save .However, you can also Bind to the Contacts folder first, and then use the ID of the folder in the Save method call. Toutefois, sachez que cela crée un appel EWS supplémentaire.Be aware, however, that this creates an extra EWS call.

    // 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’EWSCreate a contact as a delegate by using 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.EWS enables you to use the service object for the delegate user to create contact items for the mailbox owner. Cet exemple montre comment utiliser l’opération CreateItem pour créer un contact.This example shows how to use the CreateItem operation to create a contact.

Il s’agit également de la demande XML que l’API managée EWS envoie lorsque vous utilisez la méthode Save pour créer un contact.This is also the XML request that the EWS Managed API sends when you use the Save method to create a 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 demande CreateItem avec un message CreateItemResponse qui inclut la valeur d’élément ResponseCode NOERROR, ce qui indique que le contact a été créé avec succès.The server responds to the CreateItem request with a CreateItemResponse message that includes a ResponseCode element value of NoError, which indicates that the contact was created successfully. La réponse contient également l’ID de l’élément du contact qui vient d’être créé.The response also contains the item ID of the newly created contact.

Résoudre un contact en tant que délégué à l’aide de l’API managée EWSResolve a contact as a delegate by using the EWS Managed API

Pour rechercher un contact en fonction d’un nom ou d’un terme éventuellement ambigu, vous devez utiliser l’une des méthodes ExchangeService. ResolveName qui inclut un paramètre FolderId , afin que vous puissiez spécifier le dossier contacts du propriétaire de la boîte aux lettres.To find a contact based on a possibly ambiguous name or term, you must use one of the ExchangeService.ResolveName methods that includes a FolderId parameter, so that you can specify the mailbox owner's Contacts folder.

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 la méthode ResolveNames renvoie 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.After the ResolveNames method call returns a response with an ID, you can get, update or delete the contact using the ID and implicit access—and you do not need to specify the mailbox owner's SMTP address.

Résoudre un contact en tant que délégué à l’aide d’EWSResolve a contact as a delegate by using 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.EWS enables you to use the service object for the delegate user to resolve partial names in the mailbox owner's Contacts folder. 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 contient le mot « Johnson ».This example shows how to use the ResolveNames operation to find meetings in the mailbox owner's Contacts folder that contain the word "johnson".

Il s’agit également de la demande XML que l’API managée EWS envoie lorsque vous utilisez la méthode ResolveName pour résoudre un contact.This is also the XML request that the EWS Managed API sends when you use the ResolveName method to resolve a 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 demande ResolveNames avec un message ResolveNamesResponse qui inclut une valeur d’élément ResponseCode de NOERROR, ce qui indique que l’opération s’est terminée avec succès et qu’un seul résultat a été trouvé, ou ErrorNameResolutionMultipleResults si plusieurs résultats ont été trouvés, 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é en utilisant l’API managée EWSThe server responds to the ResolveNames request with a ResolveNamesResponse message that includes a ResponseCode element value of NoError, which indicates that the operation completed successfully and found only one result, or ErrorNameResolutionMultipleResults if multiple results were found - which is what's shown in third code example based on the contact Create a contact as a delegate by using the EWS Managed API. La réponse contient également l' ID ItemId de chaque résultat.The response also contains the ItemId of each result.

La valeur de l’élément ItemId a été raccourcie pour des raisons de lisibilité.The value of the ItemId element has been shortened for readability.

 <?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 avez 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é à l’aide d’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.Now that you have the ItemId for the contacts that match the ambiguous name, you can Get, update, or delete contact items as a delegate by using EWS by using the ItemId and implicit access—and you do not need to specify the mailbox owner's SMTP address.

Obtenir, mettre à jour ou supprimer des éléments de contact en tant que délégué à l’aide de l’API managée EWSGet, update, or delete contact items as a delegate by using the EWS Managed API

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é.You can use the EWS Managed API to get, update, or delete a contact in the same way that you perform these actions when you're not using delegate access. La seule différence réside dans le fait que l’objet de service est destiné à l’utilisateur délégué.The only difference is that the service object is for the delegate user. L’ID d’élément inclus dans l’appel de méthode de liaison identifie de manière unique l’élément dans la Banque de boîtes aux lettres, dans le dossier de contacts du propriétaire de la boîte aux lettres.The item ID included in the Bind method call uniquely identifies the item in the mailbox store, in the mailbox owner's Contacts folder.

Tableau 2. Méthodes de l’API managée EWS utilisation d’un contact en tant que déléguéTable 2. EWS Managed API methods working with a contact as a delegate

TâcheTask Méthode d'API managée EWSEWS Managed API method Exemple de codeCode example
Obtenir une ressource contactGet a contact
RattachBind
Obtention d’un élément à l’aide de l’API managée EWSGet an item by using the EWS Managed API
Mise à jour d'un contactUpdate a contact
Liaison suivie par la mise à jourBind followed by Update
Mise à jour d’un élément à l’aide de l’API managée EWSUpdate an item by using the EWS Managed API
Supprimer un contactDelete a contact
Bind suivi de DeleteBind followed by Delete
Suppression d’un élément à l’aide de l’API managée EWSDelete an item by using the EWS Managed API

Obtenir, mettre à jour ou supprimer des éléments de contact en tant que délégué à l’aide d’EWSGet, update, or delete contact items as a delegate by using 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é.You can use EWS to get, update, or delete a meeting or appointment contact in the same way that you perform these actions when you're not using delegate access. La seule différence réside dans le fait que l’objet de service est destiné à l’utilisateur délégué.The only difference is that the service object is for the delegate user. L’ID d’élément inclus dans la demande GetItem identifie de manière unique l’élément dans la Banque de boîtes aux lettres, dans le dossier contacts du propriétaire de la boîte aux lettres.The item ID included in the GetItem request uniquely identifies the item in the mailbox store, in the mailbox owner's Contacts folder.

Tableau 3. Opérations EWS pour travailler avec un contact en tant que déléguéTable 3. EWS operations for working with a contact as a delegate

TaskTask Opération EWSEWS operation ExempleSample
Obtenir une ressource contactGet a contact
GetItemGetItem
Obtention d’un élément à l’aide d’EWSGet an item by using EWS
Mise à jour d'un contactUpdate a contact
GetItem suivi de UpdateItemGetItem followed by UpdateItem
Mise à jour d’un élément à l’aide d’EWSUpdate an item by using EWS
Supprimer un contactDelete a contact
GetItem , suivi de DeleteItemGetItem followed by DeleteItem
Suppression d’un élément à l’aide d’EWSDelete an item by using EWS

Voir aussiSee also