Freigeben über


Zugreifen auf E-Mails als Stellvertretung mithilfe der EWS in Exchange

Erfahren Sie, wie Sie mithilfe der EWS Managed API oder EWS in Exchange als Stellvertretung auf E-Mails zugreifen.

Sie können die EWS Managed API oder EWS verwenden, um einem Benutzerdelegat Zugriff auf den Posteingangsordner eines Postfachbesitzers zu gewähren. Der Stellvertretung kann dann Besprechungsanfragen im Namen des Postfachbesitzers erstellen, nach E-Mails suchen und E-Mails aus dem Ordner Posteingang des Postfachbesitzers abrufen, aktualisieren und löschen, je nach seinen Berechtigungen.

Als Delegat verwenden Sie die gleichen Methoden und Vorgänge, um auf den Posteingangsordner eines Postfachbesitzers zuzugreifen, den Sie für den Zugriff auf einen Posteingangsordner ohne Stellvertretungszugriff verwenden. Der Standard Unterschied besteht darin, dass Sie expliziten Zugriff verwenden müssen, um ein E-Mail-Element zu suchen oder zu erstellen. Nachdem Sie die Element-ID identifiziert haben, können Sie den impliziten Zugriff verwenden, um das Element abzurufen, zu aktualisieren oder zu löschen.

Tabelle 1. EWS Managed API-Methoden und EWS-Vorgänge für den Zugriff auf E-Mails als Delegat

Aktion Verwenden Sie diese verwaltete EWS-API-Methode... Zu verwendende EWS-Operation...
Erstellen und Senden einer E-Mail als Stellvertretung
EmailMessage.Save , wobei der FolderId-Parameterexpliziten Zugriff auf den Ordner "Drafts" des Postfachbesitzers bietet
EmailMessage.SendAndSaveCopy , wobei der FolderId-Parameterexpliziten Zugriff auf den Ordner "Gesendete Elemente" des Postfachbesitzers bietet
CreateItem, wobei das Mailbox-Element die EmailAddress des Postfachbesitzers festlegt
SendItem , wobei das Mailbox-Element die EmailAddress des Postfachbesitzers angibt
Erstellen mehrerer E-Mail-Nachrichten als Stellvertretung
ExchangeService.CreateItems , bei dem der FolderId-Parameterexpliziten Zugriff auf den Posteingangsordner des Postfachbesitzers bietet
CreateItem, wobei das Mailbox-Element die EmailAddress des Postfachbesitzers festlegt
Suchen oder Suchen einer E-Mail als Stellvertretung
ExchangeService.FindItems , bei dem der FolderId-Parameterexpliziten Zugriff auf den Posteingangsordner des Postfachbesitzers bietet
FindItem, wobei das Mailbox-Element die EmailAddress des Postfachbesitzers festlegt
Abrufen einer E-Mail als Stellvertretung
EmailMessage.Bind
GetItem
Aktualisieren einer E-Mail als Stellvertretung
EmailMessage.Bind gefolgt von EmailMessage.Update
GetItem gefolgt von UpdateItem
Löschen einer E-Mail als Stellvertretung
EmailMessage.Bind gefolgt von EmailMessage.Delete
GetItem gefolgt von DeleteItem

Beachten Sie beim Arbeiten mit E-Mails als Stellvertretung folgendes:

  • Wenn ein Delegat nur mit Besprechungsanfragen und -antworten arbeiten muss, benötigt der Delegat keinen Zugriff auf den Ordner Posteingang. Weitere Informationen finden Sie unter Erforderliche Aufgaben für den Zugriff auf Kalender als Stellvertretung.

  • Wenn ein Empfänger eine Nachricht empfängt, die im Namen eines Postfachbesitzers gesendet wurde, wird der Absender als "Stellvertretung im Namen des Postfachbesitzers" angezeigt.

Hinweis

In den Codebeispielen in diesem Artikel primary@contoso.com ist der Postfachbesitzer.

Erforderliche Tasks

Bevor ein Benutzer als Delegat auf den Posteingangsordner des Postfachbesitzers zugreifen kann, muss der Benutzer als Stellvertretung mit Berechtigungen für den Posteingangsordner des Postfachbesitzers hinzugefügt werden.

Erstellen und Senden einer E-Mail als Delegaten mithilfe der verwalteten EWS-API

Mit der verwalteten EWS-API können Sie das Dienstobjekt für den Stellvertretungsbenutzer verwenden, um E-Mails im Namen des Postfachbesitzers zu erstellen und zu senden. In diesem Beispiel wird gezeigt, wie Sie die Save-Methode verwenden, um die Nachricht im Ordner "Entwürfe" des Postfachbesitzers zu speichern, und dann die SendAndSaveCopy-Methode , um die E-Mail zu senden und die Nachricht im Ordner "Gesendete Elemente" des Postfachbesitzers zu speichern.

In diesem Beispiel wird davon ausgegangen, dass service ein gültiges ExchangeService-Objekt für den Delegaten ist und dass dem Delegat die entsprechenden Berechtigungen für den Postfachbesitzer in den Ordnern Posteingang, Entwürfe und Gesendete Elemente erteilt wurden.

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

Erstellen und Senden einer E-Mail als Stellvertretung mithilfe von EWS

EWS ermöglicht es Ihnen, das Dienstobjekt für den Stellvertretungsbenutzer zu verwenden, um E-Mails im Namen des Postfachbesitzers zu erstellen und zu senden. In diesem Beispiel wird gezeigt, wie sie den CreateItem-Vorgang zum Erstellen einer E-Mail und den SendItem-Vorgang verwenden, um die Zeit zu senden und im Ordner "Gesendete Elemente" des Postfachbesitzers zu speichern.

Dies ist auch die erste XML-Anforderung, die die verwaltete EWS-API sendet, wenn Sie die Save-Methode verwenden, um eine E-Mail zu erstellen und zu senden.

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

Der Server antwortet auf die CreateItem-Anforderung mit einer CreateItemResponse-Nachricht , die den ResponseCode-ElementwertNoError enthält, der angibt, dass die E-Mail erfolgreich erstellt und gespeichert wurde. Die Antwort enthält auch die Element-ID der neu erstellten E-Mail.

Der ItemId-Wert wurde aus Gründen der Lesbarkeit gekürzt.

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

Verwenden Sie als Nächstes den SendItem-Vorgang , um die Nachricht im Namen des Postfachbesitzers zu senden und im Ordner "Gesendete Elemente" des Postfachbesitzers zu speichern.

Der ItemId-Wert wurde aus Gründen der Lesbarkeit gekürzt.

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

Der Server antwortet auf die SendItem-Anforderung mit einer SendItemResponse-Nachricht , die den ResponseCode-ElementwertNoError enthält, der angibt, dass die E-Mail erfolgreich gesendet und im Ordner "Gesendete Elemente" des Postfachbesitzers gespeichert wurde.

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

Suchen nach einer E-Mail als Delegaten mithilfe der verwalteten EWS-API

Um nach einer E-Mail zu suchen, müssen Sie eine der ExchangeService.FindItems-Methoden verwenden, die einen FolderId-Parameter enthält, damit Sie den Posteingangsordner des Postfachbesitzers angeben können.

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

Nachdem der FindItems-Aufruf eine Antwort mit einer ID zurückgibt, können Sie diese E-Mail mithilfe der ID und des impliziten Zugriffs abrufen, aktualisieren oder löschen, und Sie müssen die SMTP-Adresse des Postfachbesitzers nicht angeben.

Suchen nach einer E-Mail als Stellvertretung mithilfe von EWS

EWS ermöglicht es Ihnen, das Dienstobjekt für den Delegatenbenutzer zu verwenden, um nach E-Mails zu suchen, die eine Reihe von Suchkriterien erfüllen. In diesem Beispiel wird gezeigt, wie sie den FindItem-Vorgang verwenden, um Nachrichten im Posteingangsordner des Besitzers zu suchen, die das Wort "soccer" im Betreff enthalten.

Dies ist auch die XML-Anforderung, die die verwaltete EWS-API sendet, wenn Sie nach einer E-Mail suchen.

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

Der Server antwortet auf die FindItem-Anforderung mit einer FindItemResponse-Nachricht, die das ResponseCode-Element mit dem Wert NoError enthält, der angibt, dass die Suche erfolgreich abgeschlossen wurde. Die Antwort enthält ein Message-Element für alle E-Mails, die die Suchkriterien erfüllt haben. In diesem Fall wird nur eine E-Mail gefunden.

Der Wert des ItemId -Elements wurde zur besseren Lesbarkeit gekürzt.

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

Nachdem Sie nun über die ItemId für die E-Mail verfügen, die Ihren Kriterien entspricht, können Sie diese E-Mail mithilfe der ItemId und des impliziten Zugriffs abrufen, aktualisieren oder löschen, und Sie müssen die SMTP-Adresse des Postfachbesitzers nicht angeben.

Abrufen, Aktualisieren oder Löschen von E-Mail-Elementen als Stellvertretung mithilfe der verwalteten EWS-API

Sie können die verwaltete EWS-API verwenden, um eine E-Mail auf die gleiche Weise abzurufen, zu aktualisieren oder zu löschen, wie Sie diese Aktionen ausführen, wenn Sie keinen Stellvertretungszugriff verwenden. Der einzige Unterschied besteht darin, dass das ExchangeService-Objekt für den Delegatbenutzer gilt. Die element-ID, die im Bind-Methodenaufruf enthalten ist, identifiziert eindeutig das Element im Postfachspeicher im Ordner Posteingang des Postfachbesitzers.

Tabelle 2. Verwaltete EWS-API-Methoden, die mit E-Mail als Stellvertretung arbeiten

Aufgabe EWS Managed API-Methode Codebeispiel
Abrufen einer E-Mail
Bind
Abrufen eines Elements mithilfe der verwalteten EWS-API
Aktualisieren einer E-Mail
Bind gefolgt von Update
Aktualisieren eines Elements mithilfe der verwalteten EWS-API
Löschen einer E-Mail
Bind gefolgt von Löschen
Löschen eines Elements mithilfe der verwalteten EWS-API

Abrufen, Aktualisieren oder Löschen von E-Mail-Elementen als Stellvertretung mithilfe von EWS

Sie können die verwaltete EWS-API verwenden, um eine E-Mail auf die gleiche Weise abzurufen, zu aktualisieren oder zu löschen, wie Sie diese Aktionen ausführen, wenn Sie keinen Stellvertretungszugriff verwenden. Der einzige Unterschied besteht darin, dass das Dienstobjekt für den Stellvertretungsbenutzer gilt. Die in der GetItem-Anforderung enthaltene Element-ID identifiziert das Element im Postfachspeicher eindeutig im Ordner Posteingang des Postfachbesitzers.

Tabelle 3. EWS-Vorgänge zum Arbeiten mit E-Mail als Stellvertretung

Aufgabe EWS-Vorgang Codebeispiel
Abrufen einer E-Mail
GetItem
Abrufen eines Elements mithilfe von EWS
Aktualisieren einer E-Mail
GetItem gefolgt von UpdateItem
Aktualisieren eines Elements mithilfe von EWS
Löschen einer E-Mail
GetItem gefolgt von DeleteItem
Löschen eines Elements mithilfe von EWS

Siehe auch