Antworten auf E-Mail-Nachrichten mithilfe von EWS in Exchange
Erfahren Sie, wie Sie mithilfe der verwalteten EWS-API oder EWS in Exchange auf E-Mail-Nachrichten reagieren.
Sie können die verwaltete EWS-API oder EWS verwenden, um auf Nachrichten zu antworten, indem Sie sie beantworten oder an Empfänger weiterleiten.
Tabelle 1. Verwaltete EWS-API-Methoden und EWS-Vorgänge zum Reagieren auf E-Mail-Nachrichten
Aufgabe | EWS Managed API-Methode | EWS-Vorgang |
---|---|---|
Antworten auf eine E-Mail-Nachricht |
EmailMessage.Reply EmailMessage.CreateReply |
CreateItem, wobei das Items-Element ein untergeordnetes Element von ReplyToItem oder ReplyAllToItem aufweist. |
Weiterleiten einer E-Mail-Nachricht |
EmailMessage.Forward EmailMessage.CreateForward |
CreateItem, wobei das Items-Element über ein untergeordnetes Element von ForwardItem verfügt. |
Antworten auf eine E-Mail-Nachricht mithilfe der verwalteten EWS-API
Die verwaltete EWS-API bietet zwei Methoden, mit denen Sie auf Nachrichten antworten können: Reply und CreateReply. Die Reply-Methode akzeptiert nur zwei Parameter: die Antwortnachricht, die dem vorhandenen Text vorangestellt wird, und einen booleschen Wert, der angibt, ob die Antwort an alle Empfänger (true) oder nur an den Absender (false) gesendet werden soll. Wenn Sie einer Nachricht zusätzliche Empfänger hinzufügen, zusätzliche Eigenschaften für eine Antwort festlegen oder eine Anlage hinzufügen müssen, verwenden Sie die CreateReply-Methode , mit der Sie alle erstklassigen Eigenschaften festlegen können, die für ein EmailMessage-Objekt verfügbar sind.
Im folgenden Codebeispiel wird gezeigt, wie die Reply-Methode verwendet wird, um auf eine E-Mail-Nachricht zu antworten.
In diesem Beispiel wird davon ausgegangen, dass service ein gültiges ExchangeService-Objekt ist und der Benutzer bei einem Exchange-Server authentifiziert wurde. Die lokale Variable ItemId ist die ID des Elements, auf das geantwortet werden soll. Im Beispiel wird die FindRecentlySent-Methode aufgerufen, um zu überprüfen, ob die Nachricht als antwortet markiert wurde.
// As a best practice, limit the properties returned by the Bind method to only those that are required.
PropertySet propSet = new PropertySet(BasePropertySet.IdOnly, ItemSchema.LastModifiedTime);
// Bind to the email message to reply to by using the ItemId.
// This method call results in a GetItem call to EWS.
EmailMessage message = EmailMessage.Bind(service, ItemId, propSet);
string myReply = "This is the message body of the email reply.";
bool replyToAll = false;
// Send the response message.
// This method call results in a CreateItem call to EWS.
message.Reply(myReply, replyToAll);
// Verify that the response was sent by calling FindRecentlySent.
FindRecentlySent(message);
Im folgenden Codebeispiel wird gezeigt, wie die CreateReply-Methode verwendet wird , um auf eine E-Mail-Nachricht zu antworten.
// Bind to the email message to reply to by using the ItemId.
// This method call results in a GetItem call to EWS.
EmailMessage message = EmailMessage.Bind(service, ItemId, BasePropertySet.IdOnly);
// Create the reply response message from the original email message.
// Indicate whether the message is a reply or reply all type of reply.
bool replyToAll = true;
ResponseMessage responseMessage = message.CreateReply(replyToAll);
// Prepend the reply to the message body.
string myReply = "This is the message body of the email reply.";
responseMessage.BodyPrefix = myReply;
// Send the response message.
// This method call results in a CreateItem call to EWS.
responseMessage.SendAndSaveCopy();
// Check that the response was sent by calling FindRecentlySent.
FindRecentlySent(message);
Wenn Sie der Antwortnachricht eine Anlage hinzufügen müssen, ersetzen Sie den Aufruf der SendAndSaveCopy-Methode durch den folgenden Code.
EmailMessage reply = responseMessage.Save();
reply.Attachments.AddFileAttachment("attachmentname.txt");
reply.Update(ConflictResolutionMode.AutoResolve);
reply.SendAndSaveCopy();
Antworten auf eine E-Mail-Nachricht mithilfe von EWS
Im folgenden Codebeispiel wird gezeigt, wie Sie mithilfe von EWS auf eine Nachricht antworten. Verwenden Sie den CreateItem-Vorgang , wobei das MessageDisposition-Attribut auf SendAndSaveCopy festgelegt ist, um die Nachricht zu senden und die Antwort im Ordner Gesendete Elemente zu speichern. Schließen Sie entweder das ReplyAllToItem-Element als untergeordnetes Element des Elements-Elements ein, um allen Personen im Nachrichtenthread zu antworten, oder schließen Sie das ReplyToItem-Element ein, um nur dem Absender zu antworten.
Dies ist auch die XML-Anforderung, die die verwaltete EWS-API sendet, wenn entweder die Reply- oder die CreateReply-Methode aufgerufen wird .
<?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="SendAndSaveCopy">
<m:Items>
<t:ReplyAllToItem>
<t:ReferenceItemId Id="AAMkADE4="
ChangeKey="CQAAABYA" />
<t:NewBodyContent BodyType="HTML">This is the message body of the email reply.</t:NewBodyContent>
</t:ReplyAllToItem>
</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 Antwort erfolgreich erstellt und gesendet wurde.
Wenn Sie ihrer Antwortnachricht eine Anlage hinzufügen müssen, rufen Sie den Oben angegebenen CreateItem-Vorgang auf, ändern Sie messageDisposition jedoch in SaveOnly. Rufen Sie dann den CreateAttachment-Vorgang auf, gefolgt von der SendItem-Operation .
Weiterleiten einer E-Mail-Nachricht mithilfe der verwalteten EWS-API
Die verwaltete EWS-API bietet zwei Methoden, die Sie zum Weiterleiten von Nachrichten verwenden können: Forward und CreateForward. Die Forward-Methode akzeptiert nur zwei Parameter: die Nachricht, die dem vorhandenen Text vorangestellt werden soll, und ein Array oder eine Sammlung von Empfängern, je nachdem, welche Überladung Sie verwenden möchten. Wenn Sie der Nachricht, die Sie weiterleiten, eine Anlage hinzufügen oder zusätzliche Eigenschaften für die neue Nachricht festlegen müssen, verwenden Sie die CreateForward-Methode , mit der Sie alle Eigenschaften festlegen können, die für ein EmailMessage-Objekt verfügbar sind.
Im folgenden Codebeispiel wird gezeigt, wie sie die Forward-Methode verwenden, um eine E-Mail-Nachricht an einen Empfänger weiterzuleiten.
In diesem Beispiel wird davon ausgegangen, dass service ein gültiges ExchangeService-Objekt ist und der Benutzer bei einem Exchange-Server authentifiziert wurde. Die lokale Variable ItemId ist die ID des elements, das weitergeleitet werden soll. Im Beispiel wird die FindRecentlySent-Methode aufgerufen, um zu überprüfen, ob die Nachricht als weitergeleitet markiert wurde.
// Bind to the email message to reply to by using the ItemId.
// This method call results in a GetItem call to EWS.
EmailMessage message = EmailMessage.Bind(service, ItemId, BasePropertySet.IdOnly);
string myForward = "This is the message body of the forwarded email.";
// Send the response message.
// This method call results in a CreateItem call to EWS.
message.Forward(myForward, "sadie@contoso.com");
// Verify that the forwarded response was sent by calling FindRecentlySent.
FindRecentlySent(message);
Im folgenden Codebeispiel wird gezeigt, wie Sie die CreateForward-Methode verwenden, um eine E-Mail-Nachricht an einen Empfänger weiterzuleiten.
// Bind to the email message to reply to by using the ItemId.
// This method call results in a GetItem call to EWS.
EmailMessage message = EmailMessage.Bind(service, ItemId, BasePropertySet.IdOnly);
// Create the reply response message from the original email message.
// Indicate whether the message is a reply or reply all type of reply.
ResponseMessage forwardMessage = message.CreateForward();
// Set properties on the email message.
forwardMessage.ToRecipients.Add("sadie@contoso.com");
forwardMessage.Body = "Sadie,<br><br>I thought you'd be interested in this thread.<br><br>-Mack";
// Send and save a copy of the replied email message in the default Sent Items folder.
forwardMessage.SendAndSaveCopy();
// Verify that the forwarded message was sent by calling FindRecentlySent.
FindRecentlySent(message);
Wenn Sie der weitergeleiteten Nachricht eine Anlage hinzufügen müssen, ersetzen Sie den Aufruf der SendAndSaveCopy-Methode durch den folgenden Code.
EmailMessage forward = forwardMessage.Save();
forward.Attachments.AddFileAttachment("attachmentname.txt");
forward.Update(ConflictResolutionMode.AutoResolve);
forward.SendAndSaveCopy();
Weiterleiten einer E-Mail-Nachricht mithilfe von EWS
Das folgende Codebeispiel zeigt, wie Sie eine Nachricht mithilfe von EWS weiterleiten. Verwenden Sie den CreateItem-Vorgang , wobei das MessageDisposition-Attribut auf SendAndSaveCopy festgelegt ist, um die Nachricht zu senden und die Antwort im Ordner Gesendete Elemente zu speichern. Das ForwardItem-Element gibt an, dass es sich bei dem Element um eine weitergeleitete Nachricht handelt.
Dies ist auch die XML-Anforderung, die die verwaltete EWS-API sendet, wenn entweder die Forward - oder die CreateForward-Methode aufgerufen wird.
<?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="SendAndSaveCopy">
<m:Items>
<t:ForwardItem>
<t:ToRecipients>
<t:Mailbox>
<t:EmailAddress>sadie@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:ToRecipients>
<t:ReferenceItemId Id="AAAMkADE="
ChangeKey="CQAAABYA" />
<t:NewBodyContent BodyType="HTML">This is the message body of the forwarded email.</t:NewBodyContent>
</t:ForwardItem>
</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 weitergeleitete Nachricht erfolgreich erstellt und gesendet wurde.
Wenn Sie ihrer Antwortnachricht eine Anlage hinzufügen müssen, rufen Sie den CreateItem-Vorgang auf, ändern Sie messageDisposition jedoch in SaveOnly. Rufen Sie dann den CreateAttachment-Vorgang auf, gefolgt von der SendItem-Operation .
Suchen der Nachricht, auf die zuletzt geantwortet oder weitergeleitet wurde, mithilfe der verwalteten EWS-API
Das folgende Codebeispiel zeigt, wie Sie das zuletzt ausgeführte Verb und den Zeitpunkt finden, zu dem das letzte Verb für das angegebene Element ausgeführt wurde. Diese Methode wird aus anderen EWS Managed API-Codebeispielen in diesem Thema aufgerufen, um zu überprüfen, ob die Elemente, auf die Sie geantwortet oder weitergeleitet haben, als beantwortet oder weitergeleitet in Ihrem Posteingang markiert wurden.
Im Beispiel wird die erweiterte Eigenschaft PidTagLastVerbExecuted (0x10820003) verwendet, um zu bestimmen, ob die Nachricht eine Antwort, eine Antwort alle oder eine Weiterleitung war, und die erweiterte PidTagLastVerbExecutionTime -Eigenschaft (0x10820040), um zu bestimmen, wann die Antwort oder Weiterleitung gesendet wurde.
public static void FindRecentlySent(EmailMessage messageToCheck)
{
// Create extended property definitions for PidTagLastVerbExecuted and PidTagLastVerbExecutionTime.
ExtendedPropertyDefinition PidTagLastVerbExecuted = new ExtendedPropertyDefinition(0x1081, MapiPropertyType.Integer);
ExtendedPropertyDefinition PidTagLastVerbExecutionTime = new ExtendedPropertyDefinition(0x1082, MapiPropertyType.SystemTime);
PropertySet propSet = new PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.Subject, PidTagLastVerbExecutionTime, PidTagLastVerbExecuted);
messageToCheck = EmailMessage.Bind(service, messageToCheck.Id, propSet);
// Determine the last verb executed on the message and display output.
object responseType;
if (messageToCheck.TryGetProperty(PidTagLastVerbExecuted, out responseType))
{
object ReplyTime = null;
switch (((Int32)responseType))
{
case 102: Console.WriteLine("A reply was sent to the '" + messageToCheck.Subject.ToString() + "' email message at");
break;
case 103: Console.WriteLine("A reply all was sent to the '" + messageToCheck.Subject.ToString() + "' email message at");
break;
case 104: Console.WriteLine("The '" + messageToCheck.Subject.ToString() + "' email message was forwarded at");
break;
}
if (messageToCheck.TryGetProperty(PidTagLastVerbExecutionTime, out ReplyTime))
{
Console.WriteLine(((DateTime)ReplyTime).ToString() + ".");
}
}
else
{
Console.WriteLine("No changes were made to '" + messageToCheck.Subject.ToString() + "'.");
}
}