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="https://schemas.microsoft.com/exchange/services/2006/messages" 
               xmlns:t="https://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="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://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="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="https://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="https://schemas.microsoft.com/exchange/services/2006/messages"
                       xmlns:t="https://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="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://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="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://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.

Confira também