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 |