Отправка сообщений электронной почты с помощью EWS в Exchange
Узнайте, как отправлять новые или черновики сообщений электронной почты или отправлять отложенное сообщение электронной почты с помощью управляемого API EWS или EWS в Exchange.
Независимо от того, используете ли вы управляемый API EWS или EWS, вы можете отправлять сообщения электронной почты двумя способами. Вы можете отправить существующее сообщение, например сообщение, хранящееся в папке Черновики, или создать и отправить сообщение электронной почты за один шаг. Методы и операции, используемые для отправки сообщения, одинаковы, независимо от того, отправляете ли вы сообщение немедленно или отправляете отложенное сообщение.
Таблица 1. Методы управляемого API EWS и операции EWS для отправки сообщений электронной почты
Задача | Метод управляемого API EWS | Операция EWS |
---|---|---|
Отправка нового сообщения электронной почты |
EmailMessage.SendAndSaveCopy |
CreateItem |
Отправка существующего сообщения электронной почты |
EmailMessage.Send |
SendItem |
Отправка нового сообщения электронной почты с помощью управляемого API EWS
В следующем примере кода показано, как использовать объект EmailMessage для создания сообщения электронной почты и метод SendAndSaveCopy для отправки сообщения получателю и сохранения сообщения в папке Отправленные.
В этом примере предполагается, что служба является действительным объектом ExchangeService, и что пользователь прошел проверку подлинности на сервере Exchange server.
// 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.");
Отправка нового сообщения электронной почты с помощью EWS
В следующем примере кода показано, как использовать операцию CreateItem со значениемMessageDispositionSendAndSaveCopy для создания сообщения электронной почты, отправки сообщения получателю и сохранения сообщения в папке Отправленные. Это также XML-запрос, который управляемый API EWS отправляет при отправке нового сообщения электронной почты.
<?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>
В ответ на запрос CreateItem сервер отправляет сообщение CreateItemResponse, включающее параметр ResponseCode со значением NoError, которое указывает, что сообщение было успешно создано, и свойство ItemId созданного сообщения.
Отправка черновика сообщения электронной почты с помощью управляемого API EWS
В следующем примере кода показано, как отправить сообщение, хранящееся в папке Черновики, как показано в разделе Создание сообщения электронной почты с помощью управляемого API EWS. Сначала используйте метод Bind для получения сообщения, а затем используйте метод Send для отправки сообщения электронной почты, как показано в следующем примере кода. Обратите внимание, что этот метод не сохраняет отправленное сообщение в папке Отправленные.
В этом случае свойства EmailMessageSchema.Subject и EmailMessageSchema.ToRecipients добавляются в PropertySet , чтобы эти значения можно было включить в выходные данные консоли.
В этом примере предполагается, что служба является действительным объектом ExchangeService, и что пользователь прошел проверку подлинности на сервере Exchange server.
// 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] + "'.");
Отправка черновика сообщения электронной почты с помощью EWS
В следующих примерах кода показано, как отправить сообщение, которое ранее хранилось в папке Черновики, как показано в разделе Создание сообщения электронной почты с помощью EWS. Сначала используйте операцию GetItem , чтобы получить сообщение электронной почты для отправки. Затем используйте операцию SendItem , чтобы отправить сообщение электронной почты получателям и сохранить его в папке Отправленные.
Первое сообщение, сообщение запроса GetItem , указывает ItemId черновика сообщения электронной почты для привязки, а элементы элемента ItemShape ограничивают результаты для включения в ответ GetItem . Элемент ItemShape имеет baseShapeidOnly, а элемент AdditionalProperties включает значения FieldURI для свойства Subject из схемы Item и свойство ToRecipients из схемы Message, что означает, что клиенту в ответе будут возвращены только элементы ItemId, Subject и ToRecipients . Дополнительные сведения об ограничении значений, возвращаемых в вызовах, и значении элемента BaseShape см. в разделе Наборы свойств и фигуры ответов в EWS в Exchange.
Это также XML-запрос, который отправляется управляемым API EWS при вызове метода Bind . Для удобства значения некоторых атрибутов и элементов были сокращены.
<?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>
В приведенном ниже примере показан XML-ответ, возвращаемый сервером после обработки операции GetItem. Ответ указывает, что сообщение электронной почты было успешно получено, и содержит элементы Subject и ToRecipient в соответствии с запросом. Для удобства значения некоторых атрибутов и элементов были сокращены.
<?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>
Второе сообщение, сообщение запроса SendItem , указывает ItemId отправленного сообщения электронной почты, а также SaveItemFolderId, который указывает папку, в которой нужно сохранить отправленный элемент.
<?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>
Сервер отвечает на запрос SendItem сообщением SendItemResponse , которое содержит значение ResponseCodeNoError, указывающее, что сообщение электронной почты отправлено успешно.
Отправка сообщения электронной почты с задержкой с помощью управляемого API EWS
В следующем примере кода показано, как использовать объект EmailMessage для создания сообщения электронной почты, класс ExtendedPropertyDefinition для создания определения свойства PidTagDeferredSendTime (0x3FEF0040) и метод SendAndSaveCopy для отправки отложенного сообщения и сохранения сообщения в папке Отправленные.
В этом примере предполагается, что служба является действительным объектом ExchangeService, и что пользователь прошел проверку подлинности на сервере Exchange server.
// 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();
Отправка сообщения электронной почты с задержкой с помощью EWS
В следующем примере кода показано, как использовать операцию CreateItem со значениемMessageDispositionSendAndSaveCopy для создания сообщения электронной почты, элемент ExtendedProperty для создания определения свойства Для свойства PidTagDeferredSendTime (0x3FEF0040) для задания времени отправки сообщения, а элемент SavedItemFolderId — для сохранения отправленного сообщения в папке Отправленные.
<?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>
В ответ на запрос CreateItem сервер отправляет сообщение CreateItemResponse, включающее параметр ResponseCode со значением NoError, которое указывает, что сообщение было успешно создано, и свойство ItemId созданного сообщения.