Enviar mensagens de email usando o EWS no Exchange
Saiba como enviar mensagens de email novas ou rascunhos ou enviar uma mensagem de email atrasada usando a API Gerenciada do EWS ou o EWS no Exchange.
Se você estiver usando a API Gerenciada do EWS ou o EWS, poderá enviar mensagens de email de duas maneiras. Você pode enviar uma mensagem existente, como uma mensagem armazenada em sua pasta Rascunhos, ou pode criar e enviar um email em uma etapa. Os métodos e operações que você usa para enviar a mensagem são os mesmos, seja enviando uma mensagem imediatamente ou enviando uma mensagem atrasada.
Tabela 1. Métodos de API Gerenciada do EWS e operações EWS para enviar mensagens de email
Tarefa | Método da API Gerenciada do EWS | Operação do EWS |
---|---|---|
Enviar uma nova mensagem de email |
EmailMessage.SendAndSaveCopy |
CreateItem |
Enviar uma mensagem de email existente |
EmailMessage.Send |
SendItem |
Enviar uma nova mensagem de email usando a API Gerenciada do EWS
O exemplo de código a seguir mostra como usar o objeto EmailMessage para criar uma mensagem de email e o método SendAndSaveCopy para enviar a mensagem ao destinatário e salvar a mensagem na pasta Itens Enviados.
Esse exemplo pressupõe que serviço seja um objeto ExchangeService válido e que o usuário tenha sido autenticado em um servidor Exchange.
// 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.");
Enviar uma nova mensagem de email usando o EWS
O exemplo de código a seguir mostra como usar a operação CreateItem com um valor MessageDisposition de SendAndSaveCopy para criar uma mensagem de email, enviar a mensagem para o destinatário e salvar a mensagem na pasta Itens Enviados. Essa também é a solicitação XML que a API Gerenciada do EWS envia quando você envia uma nova mensagem de email.
<?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>
O servidor responde à solicitação CreateItem com uma mensagem CreateItemResponse que inclui um valor ResponseCode de NoError, que indica que o email foi criado com êxito e o ItemId da mensagem recém-criada.
Enviar uma mensagem de email de rascunho usando a API Gerenciada do EWS
O exemplo de código a seguir mostra como enviar uma mensagem armazenada na pasta Rascunhos, conforme mostrado em Criar uma mensagem de email usando a API Gerenciada do EWS. Primeiro, use o método Bind para recuperar a mensagem e use o método Enviar para enviar a mensagem de email, conforme mostrado no exemplo de código a seguir. Observe que esse método não salva a mensagem enviada na pasta Itens Enviados.
Nesse caso, as propriedades EmailMessageSchema.Subject e EmailMessageSchema.ToRecipients são adicionadas ao PropertySet para que os valores possam ser incluídos na saída do console.
Esse exemplo pressupõe que serviço seja um objeto ExchangeService válido e que o usuário tenha sido autenticado em um servidor Exchange.
// 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] + "'.");
Enviar uma mensagem de email de rascunho usando o EWS
Os exemplos de código a seguir mostram como enviar uma mensagem que foi armazenada anteriormente na pasta Rascunhos, conforme mostrado em Criar uma mensagem de email usando o EWS. Primeiro, use a operação GetItem para recuperar a mensagem de email a ser enviada. Em seguida, use a operação SendItem para enviar a mensagem de email aos destinatários e salvá-la na pasta Itens Enviados.
A primeira mensagem, a mensagem de solicitação GetItem , especifica o ItemId da mensagem de email de rascunho a ser vinculada e os elementos no elemento ItemShape limitam os resultados a serem incluídos na resposta GetItem . O elemento ItemShape tem um BaseShape de IdOnly e o elemento AdditionalProperties inclui os valores FieldURI da propriedade Subject do esquema Item e a propriedade ToRecipients do esquema Message, o que significa que apenas os elementos ItemId, Subject e ToRecipients serão retornados ao cliente na resposta. Para obter mais informações sobre como limitar os valores retornados em chamadas e o significado do elemento BaseShape , consulte Conjuntos de propriedades e formas de resposta no EWS no Exchange.
Essa também é a solicitação XML enviada pela API Gerenciada do EWS ao chamar o método Bind . Os valores de alguns atributos e elementos foram reduzidos para legibilidade.
<?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>
O exemplo a seguir mostra a resposta XML que o servidor retorna após processar a operação GetItem . A resposta indica que a mensagem de email foi recuperada com êxito e inclui os elementos Subject e ToRecipient conforme solicitado. Os valores de alguns atributos e elementos foram reduzidos para legibilidade.
<?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>
A segunda mensagem, a mensagem de solicitação SendItem , especifica o ItemId da mensagem de email a ser enviada, bem como o SavedItemFolderId, que especifica a pasta na qual salvar o item enviado.
<?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>
O servidor responde à solicitação SendItem com uma mensagem SendItemResponse que inclui um valor ResponseCode de NoError, que indica que o email foi enviado com êxito.
Enviar uma mensagem de email atrasada usando a API Gerenciada do EWS
O exemplo de código a seguir mostra como usar o objeto EmailMessage para criar uma mensagem de email, a classe ExtendedPropertyDefinition para criar uma definição de propriedade para a propriedade PidTagDeferredSendTime (0x3FEF0040) e o método SendAndSaveCopy para enviar uma mensagem atrasada e salvar a mensagem na pasta Itens Enviados.
Esse exemplo pressupõe que serviço seja um objeto ExchangeService válido e que o usuário tenha sido autenticado em um servidor Exchange.
// 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();
Enviar uma mensagem de email atrasada usando o EWS
O exemplo de código a seguir mostra como usar a operação CreateItem com um valor MessageDisposition de SendAndSaveCopy para criar uma mensagem de email, o elemento ExtendedProperty para criar uma definição de propriedade para a propriedade PidTagDeferredSendTime (0x3FEF0040) para definir um tempo para enviar a mensagem e o elemento SavedItemFolderId para salvar a mensagem enviada na pasta Itens Enviados.
<?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>
O servidor responde à solicitação CreateItem com uma mensagem CreateItemResponse que inclui um valor ResponseCode de NoError, que indica que o email foi criado com êxito e o ItemId da mensagem recém-criada.