Senden von E-Mail-Nachrichten mit EWS in Exchange
Erfahren Sie mehr darüber, wie Sie mithilfe der EWS Managed API oder mithilfe von EWS in Exchange neue E-Mails oder E-Mail-Nachrichtenentwürfe senden.
Unabhängig davon, ob Sie die EWS Managed API oder EWS verwenden, können Sie E-Mail-Nachrichten auf zweierlei Weise senden. Sie können entweder eine vorhandene Nachricht senden, z. B. eine Nachricht, die im Ordner „Entwürfe“ gespeichert ist, oder Sie können eine E-Mail in einem Schritt erstellen und senden. Die Methoden und Vorgänge, die Sie verwenden, um die Nachricht zu senden, sind identisch, egal, ob Sie eine Nachricht sofort senden oder ob Sie eine verzögerte Nachricht senden.
Tabelle 1. EWS Managed API-Methoden und EWS-Vorgänge zum Senden von E-Mail-Nachrichten
Aufgabe | EWS Managed API-Methode | EWS-Vorgang |
---|---|---|
Senden einer neuen E-Mail-Nachricht |
EmailMessage.SendAndSaveCopy |
CreateItem |
Senden einer vorhandenen E-Mail-Nachricht |
EmailMessage.Send |
SendItem |
Senden einer neuen E-Mail-Nachricht mithilfe der EWS Managed API
Im folgenden Codebeispiel wird gezeigt, wie Sie das EmailMessage-Objekt zum Erstellen einer E-Mail-Nachricht und die SendAndSaveCopy-Methode zum Senden der Nachricht an den Empfänger und zum Speichern der Nachricht im Ordner „Gesendete Objekte“ verwenden.
In diesem Beispiel wird davon ausgegangen, dass service ein gültiges ExchangeService-Objekt ist und dass der Benutzer mit einem Exchange-Server authentifiziert wurde.
// 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");
// Send the email message and save a copy.
// This method call results in a CreateItem call to EWS.
message.SendAndSaveCopy();
Console.WriteLine("An email with the subject '" + message.Subject + "' has been sent to '" + message.ToRecipients[0] + "' and saved in the SendItems folder.");
Senden einer neuen E-Mail-Nachricht mithilfe von EWS
Im folgenden Codebeispiel wird gezeigt, wie der CreateItem-Vorgang mit demMessageDisposition-Wert SendAndSaveCopy verwendet wird, um eine E-Mail-Nachricht zu erstellen, die Nachricht an den Empfänger zu senden und die Nachricht im Ordner „Gesendete Objekte“ zu speichern. Dies ist auch die XML-Anforderung, die die verwaltete EWS-API sendet, wenn Sie eine neue E-Mail 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="SendAndSaveCopy">
<m:SavedItemFolderId>
<t:DistinguishedFolderId Id="sentitems" />
</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 einen ResponseCode-Wert von NoError enthält, der darauf hinweist, dass die E-Mail erfolgreich erstellt wurde. Außerdem ist die ItemId der neu erstellten Nachricht enthalten.
Senden eines E-Mail-Nachrichtenentwurfs mithilfe der EWS Managed API
Im folgenden Codebeispiel wird gezeigt, wie Sie eine Nachricht senden, die im Ordner „Entwürfe“ gespeichert wurde, wie unter Erstellen einer E-Mail-Nachricht mithilfe der EWS Managed API gezeigt. Verwenden Sie zunächst die Bind-Methode, um die Nachricht abzurufen, und verwenden Sie dann die Send-Methode, um die E-Mail-Nachricht zu senden, wie im folgenden Beispiel gezeigt. Beachten Sie, dass bei dieser Methode die gesendete Nachricht nicht im Ordner „Gesendete Objekte“ gespeichert wird.
In diesem Fall werden die Eigenschaften EmailMessageSchema.Subject und EmailMessageSchema.ToRecipients dem PropertySet hinzugefügt, damit die Werte in die Konsolenausgabe eingeschlossen werden können.
In diesem Beispiel wird davon ausgegangen, dass service ein gültiges ExchangeService-Objekt ist und dass der Benutzer mit einem Exchange-Server authentifiziert wurde.
// As a best practice, create a property set that limits the properties returned by the Bind method to only those that are required.
PropertySet propSet = new PropertySet(BasePropertySet.IdOnly, EmailMessageSchema.Subject, EmailMessageSchema.ToRecipients);
// This method call results in a GetItem call to EWS.
EmailMessage message = EmailMessage.Bind(service, ItemId, propSet);
// Send the email message.
// This method call results in a SendItem call to EWS.
message.Send();
Console.WriteLine("An email with the subject '" + message.Subject + "' has been sent to '" + message.ToRecipients[0] + "'.");
Senden eines E-Mail-Nachrichtenentwurfs mithilfe von EWS
Die folgenden Codebeispiele zeigen, wie Sie eine Nachricht, die zuvor im Ordner „Entwürfe“ gespeichert wurde, wie unter Erstellen einer E-Mail-Nachricht mithilfe von EWS gezeigt. Verwenden Sie zunächst den Vorgang GetItem, um die zu sendende E-Mail-Nachricht abzurufen. Verwenden Sie dann den SendItem-Vorgang, um die E-Mail an Empfänger zu senden und sie im Ordner „Entwürfe“ zu speichern.
Die erste Nachricht, die GetItem-Anforderungsnachricht, gibt die ItemId des Entwurfs für die Bindung an, und die Elemente im ItemShape-Element beschränken die Ergebnisse so, dass sie in die GetItem-Antwort eingeschlossen werden können. Das ItemShape-Element weist die BaseShapeIdOnly auf, und das AdditionalProperties-Element umfasst die FieldURI-Werte für die Subject-Eigenschaft aus dem Item-Schema und die ToRecipients-Eigenschaft aus dem Message-Schema, was bedeutet, dass nur die Elemente ItemId, Subject und ToRecipients in der Antwort an den Client zurückgegeben werden. Weitere Informationen zur Einschränkung der in Aufrufen zurückgegebenen Werte und zur Bedeutung des BaseShape-Elements finden Sie unter Eigenschaftensätze und Antwortshapes in EWS in Exchange.
Dies ist auch die XML-Anforderung, die von der verwalteten EWS-API gesendet wird, wenn die bind-Methode aufgerufen wird. Die Werte einiger Attribute und Elemente wurden zur besseren 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:GetItem>
<m:ItemShape>
<t:BaseShape>IdOnly</t:BaseShape>
<t:AdditionalProperties>
<t:FieldURI FieldURI="item:Subject" />
<t:FieldURI FieldURI="message:ToRecipients" />
</t:AdditionalProperties>
</m:ItemShape>
<m:ItemIds>
<t:ItemId Id="AAMkADE4=" />
</m:ItemIds>
</m:GetItem>
</soap:Body>
</soap:Envelope>
Das folgende Beispiel zeigt die XML-Antwort, die der Server zurückgibt, nachdem der GetItem-Vorgang verarbeitet wurde. Die Antwort weist darauf hin, dass die E-Mail-Nachricht erfolgreich abgerufen wurde, und enthält, wie angefordert, die Elemente Subject und ToRecipient. Die Werte einiger Attribute und Elemente wurden 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="842"
MinorBuildNumber="10"
Version="V2_8"
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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m:GetItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:GetItemResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:Items>
<t:Message>
<t:ItemId Id="AAMkADE4="
ChangeKey="CQAAABYA" />
<t:Subject>Project priorities</t:Subject>
<t:ToRecipients>
<t:Mailbox>
<t:Name>sadie@contoso.com</t:Name>
<t:EmailAddress>sadie@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
<t:MailboxType>OneOff</t:MailboxType>
</t:Mailbox>
</t:ToRecipients>
</t:Message>
</m:Items>
</m:GetItemResponseMessage>
</m:ResponseMessages>
</m:GetItemResponse>
</s:Body>
</s:Envelope>
Die zweite Nachricht, die SendItem-Anforderungsnachricht, gibt die ItemId der zu sendenden E-Mail sowie die SavedItemFolderId an, die den Ordner angibt, in dem das gesendete Objekt gespeichert werden soll.
<?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="AAMkADE4="
ChangeKey="CQAAABYA" />
</m:ItemIds>
<m:SavedItemFolderId>
<t:DistinguishedFolderId Id="sentitems" />
</m:SavedItemFolderId>
</m:SendItem>
</soap:Body>
</soap:Envelope>
Der Server antwortet auf die SendItem-Anforderung mit einer SendItemResponse-Nachricht, die den ResponseCode-Wert NoError enthält, was darauf hinweist, dass die E-Mail erfolgreich gesendet wurde.
Senden einer verzögerten E-Mail-Nachricht mithilfe der EWS Managed API
Im folgenden Codebeispiel wird gezeigt, wie das EmailMessage-Objekt zum Erstellen einer E-Mail-Nachricht, die ExtendedPropertyDefinition-Klasse zum Erstellen einer Eigenschaftsdefinition für die PidTagDeferredSendTime-Eigenschaft (0x3FEF0040) und die SendAndSaveCopy-Methode zum Senden einer verzögerten Nachricht und zum Speichern der Nachricht im Ordner „Entwürfe“ verwendet wird.
In diesem Beispiel wird davon ausgegangen, dass service ein gültiges ExchangeService-Objekt ist und dass der Benutzer mit einem Exchange-Server authentifiziert wurde.
// Create a new email message.
EmailMessage message = new EmailMessage(service);
// Specify the email recipient and subject.
message.ToRecipients.Add("sadie@contoso.com");
message.Subject = "Delayed email";
// Identify the extended property that can be used to specify when to send the email.
ExtendedPropertyDefinition PidTagDeferredSendTime = new ExtendedPropertyDefinition(16367, MapiPropertyType.SystemTime);
// Set the time that will be used to specify when the email is sent.
// In this example, the email will be sent one minute after the next line executes,
// provided that the message.SendAndSaveCopy request is processed by the server within one minute.
string sendTime = DateTime.Now.AddMinutes(1).ToUniversalTime().ToString();
// Specify when to send the email by setting the value of the extended property.
message.SetExtendedProperty(PidTagDeferredSendTime, sendTime);
// Specify the email body.
StringBuilder str = new StringBuilder();
str.AppendLine("The client submitted the SendAndSaveCopy request at: " + DateTime.Now.ToUniversalTime().ToString() + ".");
str.AppendLine("The email message will be sent at: " + sendTime + ".");
message.Body = str.ToString();
Console.WriteLine("");
Console.WriteLine("The client submitted the SendAndSaveCopy request at: " + DateTime.Now.ToUniversalTime().ToString() + ".");
Console.WriteLine("The email message will be sent at: " + sendTime + ".");
// Submit the request to send the email message.
message.SendAndSaveCopy();
Senden einer verzögerten E-Mail-Nachricht mithilfe von EWS
Im folgenden Codebeispiel wird gezeigt, wie der CreateItem-Vorgang mit dem MessageDisposition-Wert SendAndSaveCopy zum Erstellen einer E-Mail-Nachricht, das ExtendedProperty-Element zum Erstellen einer Eigenschaftsdefinition für die PidTagDeferredSendTime-Eigenschaft (0x3FEF0040) zum Festlegen einer Uhrzeit für das Senden der Nachricht und das SavedItemFolderId-Element zum Speichern der gesendeten Nachricht im Ordner „Gesendete Objekte“ verwendet 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="Exchange207_SP1" />
</soap:Header>
<soap:Body>
<m:CreateItem MessageDisposition="SendAndSaveCopy">
<m:SavedItemFolderId>
<t:DistinguishedFolderId Id="sentitems" />
</m:SavedItemFolderId>
<m:Items>
<t:Message>
<t:Subject>Delayed email</t:Subject>
<t:Body BodyType="HTML">
The client submitted the SendAndSaveCopy request at: 1/2/2014 9:08:52 PM.
The email message will be sent at: 1/2/2014 9:09:52 PM.
</t:Body>
<t:ExtendedProperty>
<t:ExtendedFieldURI PropertyTag="16367"
PropertyType="SystemTime" />
<t:Value>2014-01-02T21:09:52.000</t:Value>
</t:ExtendedProperty>
<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 einen ResponseCode-Wert von NoError enthält, der darauf hinweist, dass die E-Mail erfolgreich erstellt wurde. Außerdem ist die ItemId der neu erstellten Nachricht enthalten.