Partager via


Accéder à la messagerie en tant que délégué à l’aide d’EWS dans Exchange

Découvrez comment accéder à la messagerie 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 délégué utilisateur l’accès au dossier boîte de réception d’un propriétaire de boîte aux lettres. Le délégué peut ensuite créer des demandes de réunion au nom du propriétaire de la boîte aux lettres, rechercher des messages électroniques et récupérer, mettre à jour et supprimer des messages électroniques du dossier boîte de réception 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 boîte de réception d’un propriétaire de boîte aux lettres que pour accéder à un dossier Boîte de réception sans accès délégué. La main différence est que vous devez utiliser l’accès explicite pour rechercher ou créer un élément de messagerie, 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 aux e-mails 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 et envoyer un e-mail en tant que délégué
EmailMessage.Save où le paramètre FolderId fournit un accès explicite au dossier Brouillons du propriétaire de la boîte aux lettres
EmailMessage.SendAndSaveCopy où le paramètre FolderId fournit un accès explicite au dossier Éléments envoyés 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
SendItem où l’élément Mailbox spécifie l’adresse e-mail du propriétaire de la boîte aux lettres
Créer plusieurs messages électroniques en tant que délégué
ExchangeService.CreateItems où le paramètre FolderId fournit un accès explicite au dossier boîte de réception 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
Rechercher ou rechercher un e-mail en tant que délégué
ExchangeService.FindItems où le paramètre FolderId fournit un accès explicite au dossier boîte de réception 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
Recevoir un e-mail en tant que délégué
EmailMessage.Bind
GetItem
Mettre à jour un e-mail en tant que délégué
EmailMessage.Bind suivi de EmailMessage.Update
GetItem suivi de UpdateItem
Supprimer un e-mail en tant que délégué
EmailMessage.Bind suivi de EmailMessage.Delete
GetItem suivi de DeleteItem

Gardez les éléments suivants à l’esprit lorsque vous utilisez des e-mails en tant que délégué :

  • Si un délégué doit uniquement travailler avec les demandes de réunion et les réponses, il n’a pas besoin d’accéder au dossier Boîte de réception. Pour plus d’informations, consultez Tâches requises pour accéder aux calendriers en tant que délégué.

  • Lorsqu’un destinataire reçoit un message envoyé au nom d’un propriétaire de boîte aux lettres, l’expéditeur apparaît sous la forme « Délégué au nom du propriétaire de la boîte aux lettres ».

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 Boîte de réception 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é avec des autorisations sur le dossier Boîte de réception du propriétaire de la boîte aux lettres.

Créer et envoyer un e-mail 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 que l’utilisateur délégué crée et envoie des e-mails au nom du propriétaire de la boîte aux lettres. Cet exemple montre comment utiliser la méthode Save pour enregistrer le message dans le dossier Brouillons du propriétaire de la boîte aux lettres, puis la méthode SendAndSaveCopy pour envoyer le courrier et enregistrer le message dans le dossier Éléments envoyés du propriétaire de la boîte aux lettres.

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 Boîte de réception, Brouillons et Éléments envoyés du propriétaire de la boîte aux lettres.

public static void DelegateAccessCreateEmail(ExchangeService service)
{
    // Create an email message and provide it with connection 
    // configuration information by using an ExchangeService 
    // object named service.
    EmailMessage message = new EmailMessage(service);
    // Set properties on the email message.
    message.Subject = "Company Soccer Team";
    message.Body = "Are you interested in joining?";
    message.ToRecipients.Add("sadie@contoso.com");
    // Save the email to the mailbox owner's Drafts folder.
    // This method call results in a CreateItem call to EWS.
    // The FolderId parameter contains the context for the 
    // mailbox owner's Inbox folder. Any additional actions 
    // taken on this message will be performed in the mailbox 
    // owner's mailbox. 
    message.Save(new FolderId(WellKnownFolderName.Drafts, new Mailbox("primary@contoso.com")));
    // Send the email and save the message in the mailbox owner's 
    // Sent Items folder.
    // This method call results in a SendItem call to EWS.
    message.SendAndSaveCopy(new FolderId(WellKnownFolderName.SentItems, new Mailbox("primary@contoso.com")));
    Console.WriteLine("An email with the subject '" + message.Subject + "' has been sent to '" 
    + message.ToRecipients[0] + "' and saved in the Sent Items folder of the mailbox owner.");
}

Créer et envoyer un e-mail 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 et d’envoyer des e-mails au nom du propriétaire de la boîte aux lettres. Cet exemple montre comment utiliser l’opération CreateItem pour créer un e-mail et l’opération SendItem pour envoyer l’heure et l’enregistrer dans le dossier Éléments envoyés du propriétaire de la boîte aux lettres.

Il s’agit également de la première requête XML envoyée par l’API managée EWS lorsque vous utilisez la méthode Save pour créer et envoyer un e-mail.

<?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="drafts">
          <t:Mailbox>
            <t:EmailAddress>primary@contoso.com</t:EmailAddress>
          </t:Mailbox>
        </t:DistinguishedFolderId>
      </m:SavedItemFolderId>
      <m:Items>
        <t:Message>
          <t:Subject>Company Soccer Team</t:Subject>
          <t:Body BodyType="HTML">Are you interested in joining?</t:Body>
          <t:ToRecipients>
            <t:Mailbox>
              <t:EmailAddress>sadie@contoso.com</t:EmailAddress>
            </t:Mailbox>
          </t:ToRecipients>
        </t:Message>
      </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 l’e-mail a été créé et enregistré avec succès. La réponse contient également l’ID d’élément de l’e-mail nouvellement créé.

La valeur ItemId a été raccourcie pour plus 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:CreateItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
                          xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:CreateItemResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:Items>
            <t:Message>
              <t:ItemId Id="iNRaAAA="
                        ChangeKey="CQAAABYAAADOilbYa8KaT7ZgMoTz2P+hAAABiQPU" />
            </t:Message>
          </m:Items>
        </m:CreateItemResponseMessage>
      </m:ResponseMessages>
    </m:CreateItemResponse>
  </s:Body>
</s:Envelope>

Ensuite, utilisez l’opération SendItem pour envoyer le message au nom du propriétaire de la boîte aux lettres et l’enregistrer dans le dossier Éléments envoyés du propriétaire de la boîte aux lettres.

La valeur ItemId a été raccourcie pour plus de lisibilité.

<?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:SendItem SaveItemToFolder="true">
      <m:ItemIds>
        <t:ItemId Id="iNRaAAA="
                  ChangeKey="CQAAABYAAADOilbYa8KaT7ZgMoTz2P+hAAABiQPU" />
      </m:ItemIds>
      <m:SavedItemFolderId>
        <t:DistinguishedFolderId Id="sentitems">
          <t:Mailbox>
            <t:EmailAddress>primary@contoso.com</t:EmailAddress>
          </t:Mailbox>
        </t:DistinguishedFolderId>
      </m:SavedItemFolderId>
    </m:SendItem>
  </soap:Body>
</soap:Envelope>

Le serveur répond à la requête SendItem avec un message SendItemResponse qui inclut une valeur d’élément ResponseCodenoError, ce qui indique que l’e-mail a été envoyé et enregistré correctement dans le dossier Éléments envoyés du propriétaire de la boîte aux lettres.

<?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:SendItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
                        xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:SendItemResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
        </m:SendItemResponseMessage>
      </m:ResponseMessages>
    </m:SendItemResponse>
  </s:Body>
</s:Envelope>

Rechercher un e-mail en tant que délégué à l’aide de l’API managée EWS

Pour rechercher un e-mail, vous devez utiliser l’une des méthodes ExchangeService.FindItems qui inclut un paramètre FolderId , afin de pouvoir spécifier le dossier Boîte de réception du propriétaire de la boîte aux lettres.

static void DelegateAccessSearchEmailWithFilter(ExchangeService service)
{
    // Limit the result set to 10 items.
    ItemView view = new ItemView(10);
    // Define the search filter.
    SearchFilter.ContainsSubstring filter = new SearchFilter.ContainsSubstring(ItemSchema.Subject, 
        "soccer", ContainmentMode.Substring, ComparisonMode.IgnoreCase);
    view.PropertySet = new PropertySet(ItemSchema.Subject,
                                       ItemSchema.DateTimeReceived,
                                       EmailMessageSchema.IsRead);
    // Item searches do not support deep traversal.
    view.Traversal = ItemTraversal.Shallow;
    // Sorting.
    view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);
    try
    {
        // Call FindItems to find matching Inbox items. 
        // The parameters of FindItems must denote the mailbox owner,
        // mailbox, and Inbox folder.
        // This call results in a FindItem call to EWS.
        FindItemsResults<Item> results = service.FindItems(new 
            FolderId(WellKnownFolderName.Inbox, "primary@contoso.com"), 
            filter, view);
        foreach (Item item in results.Items)
        {
            Console.WriteLine("Subject: {0}", item.Subject);
            Console.WriteLine("Id: {0}", item.Id.ToString());
            if (item is EmailMessage)
            {
                EmailMessage message = item as EmailMessage;
                Console.WriteLine("Read: {0}", message.IsRead.ToString());
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("Exception while enumerating results: {0}", ex.Message);
    }
}

Une fois que l’appel FindItems a retourné une réponse avec un ID, vous pouvez obtenir, mettre à jour ou supprimer cet e-mail à 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.

Rechercher un e-mail 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 rechercher des e-mails qui répondent à un ensemble de critères de recherche. Cet exemple montre comment utiliser l’opération FindItem pour rechercher des messages dans le dossier Boîte de réception du propriétaire qui contiennent le mot « soccer » dans l’objet.

Il s’agit également de la requête XML que l’API managée EWS envoie lorsque vous recherchez un e-mail.

<?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:FindItem Traversal="Shallow">
      <m:ItemShape>
        <t:BaseShape>IdOnly</t:BaseShape>
        <t:AdditionalProperties>
          <t:FieldURI FieldURI="item:Subject" />
          <t:FieldURI FieldURI="item:DateTimeReceived" />
          <t:FieldURI FieldURI="message:IsRead" />
        </t:AdditionalProperties>
      </m:ItemShape>
      <m:IndexedPageItemView MaxEntriesReturned="10"
                             Offset="0"
                             BasePoint="Beginning" />
      <m:Restriction>
        <t:Contains ContainmentMode="Substring"
                    ContainmentComparison="IgnoreCase">
          <t:FieldURI FieldURI="item:Subject" />
          <t:Constant Value="soccer" />
        </t:Contains>
      </m:Restriction>
      <m:SortOrder>
        <t:FieldOrder Order="Descending">
          <t:FieldURI FieldURI="item:DateTimeReceived" />
        </t:FieldOrder>
      </m:SortOrder>
      <m:ParentFolderIds>
        <t:DistinguishedFolderId Id="inbox">
          <t:Mailbox>
            <t:EmailAddress>primary@contoso.com</t:EmailAddress>
          </t:Mailbox>
        </t:DistinguishedFolderId>
      </m:ParentFolderIds>
    </m:FindItem>
  </soap:Body>
</soap:Envelope>

Le serveur répond à la demande FindItem par un message FindItemResponse qui inclut la valeur d’élément ResponseCode de NoError, ce qui indique que le dossier a été correctement supprimé. La réponse contient un élément Message pour tous les e-mails qui répondent aux critères de recherche. Dans ce cas, un seul e-mail est trouvé.

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:FindItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
                        xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <m:ResponseMessages>
        <m:FindItemResponseMessage ResponseClass="Success">
          <m:ResponseCode>NoError</m:ResponseCode>
          <m:RootFolder IndexedPagingOffset="1"
                        TotalItemsInView="1"
                        IncludesLastItemInRange="true">
            <t:Items>
              <t:Message>
                <t:ItemId Id="iNwoAAA="
                          ChangeKey="CQAAABYAAADOilbYa8KaT7ZgMoTz2P+hAAABiQuu" />
                <t:Subject>Soccer team</t:Subject>
                <t:DateTimeReceived>2014-03-10T06:16:55Z</t:DateTimeReceived>
                <t:IsRead>false</t:IsRead>
              </t:Message>
            </t:Items>
          </m:RootFolder>
        </m:FindItemResponseMessage>
      </m:ResponseMessages>
    </m:FindItemResponse>
  </s:Body>
</s:Envelope>

Maintenant que vous disposez de l’ItemId pour l’e-mail qui répond à vos critères, vous pouvez obtenir, mettre à jour ou supprimer cet e-mail à 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 courrier électronique 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 e-mail 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 ExchangeService est destiné à l’utilisateur délégué. L’ID d’élément inclus dans l’appel de méthode Bind identifie de façon unique l’élément dans le magasin de boîtes aux lettres, dans le dossier Boîte de réception du propriétaire de la boîte aux lettres.

Tableau 2. Méthodes d’API managée EWS fonctionnant avec le courrier électronique en tant que délégué

Tâche Méthode d'API managée EWS Exemple de code
Recevoir un e-mail
Lier
Obtention d’un élément à l’aide de l’API managée EWS
Mettre à jour un e-mail
Lier suivi de Mettre à jour
Mise à jour d’un élément à l’aide de l’API managée EWS
Supprimer un e-mail
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 courrier électronique en tant que délégué à l’aide d’EWS

Vous pouvez utiliser l’API managée EWS pour obtenir, mettre à jour ou supprimer un e-mail 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 Boîte de réception du propriétaire de la boîte aux lettres.

Tableau 3. Opérations EWS pour l’utilisation de la messagerie en tant que délégué

Tâche Opération EWS Exemple de code
Recevoir un e-mail
GetItem
Obtention d’un élément à l’aide d’EWS
Mettre à jour un e-mail
GetItem suivi de UpdateItem
Mise à jour d’un élément à l’aide d’EWS
Supprimer un e-mail
GetItem suivi de DeleteItem
Suppression d’un élément à l’aide d’EWS

Voir aussi