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="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://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="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://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="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns="http://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="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://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 |