Enviar mensajes de correo electrónico mediante EWS en ExchangeSend email messages by using EWS in Exchange

Obtenga información sobre cómo enviar mensajes de correo electrónico nuevos o borradores, o para enviar un mensaje de correo electrónico retrasado mediante la API administrada de EWS o EWS en Exchange.Learn how to send new or draft email messages, or to send a delayed email message by using the EWS Managed API or EWS in Exchange.

Independientemente de si usa la API administrada de EWS o EWS, puede enviar mensajes de correo electrónico de dos maneras.Whether you are using the EWS Managed API or EWS, you can send email messages in two ways. Puede enviar un mensaje existente, como un mensaje almacenado en la carpeta Borradores, o puede crear y enviar un correo electrónico en un solo paso.You can either send an existing message, such as a message stored in your Drafts folder, or you can create and send an email in one step. Los métodos y las operaciones que se usan para enviar el mensaje son los mismos si envía un mensaje inmediatamente o envía un mensaje retrasado.The methods and operations that you use to send the message are the same whether you're sending a message immediately, or sending a delayed message.

Tabla 1. Métodos de API administrada de EWS y operaciones EWS para enviar mensajes de correo electrónicoTable 1. EWS Managed API methods and EWS operations for sending email messages

TareaTask Método de la API administrada de EWSEWS Managed API method Operación de EWSEWS operation
Enviar un nuevo mensaje de correo electrónicoSend a new email message
EmailMessage. SendAndSaveCopyEmailMessage.SendAndSaveCopy
CreateItemCreateItem
Enviar un mensaje de correo electrónico existenteSend an existing email message
EmailMessage. SendEmailMessage.Send
SendItemSendItem

Enviar un mensaje de correo electrónico nuevo mediante la API administrada de EWSSend a new email message by using the EWS Managed API

En el ejemplo de código siguiente se muestra cómo usar el objeto EmailMessage para crear un mensaje de correo electrónico y el método SendAndSaveCopy para enviar el mensaje al destinatario y guardar el mensaje en la carpeta elementos enviados.The following code example shows how to use the EmailMessage object to create an email message and the SendAndSaveCopy method to send the message to the recipient and save the message in the Sent Items folder.

En este ejemplo se supone que el servicio es un objeto ExchangeService válido y que el usuario se ha autenticado en un servidor de Exchange.This example assumes that service is a valid ExchangeService object and that the user has been authenticated to an 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.");

Enviar un mensaje de correo electrónico nuevo mediante EWSSend a new email message by using EWS

En el ejemplo de código siguiente se muestra cómo utilizar la operación CreateItem con un valor MessageDisposition de SendAndSaveCopy para crear un mensaje de correo electrónico, enviar el mensaje al destinatario y guardar el mensaje en la carpeta elementos enviados.The following code example shows how to use the CreateItem operation with a MessageDisposition value of SendAndSaveCopy to create an email message, send the message to the recipient, and save the message in the Sent Items folder. También es la solicitud XML que la API administrada de EWS envía cuando envía un nuevo mensaje de correo electrónico.This is also the XML request that the EWS Managed API sends when you send a new email message.

<?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>

El servidor responde a la solicitud CreateItem con un mensaje CreateItemResponse que incluye un valor ResponseCode de NoError, que indica que el correo electrónico se ha creado correctamente y el Itemid del mensaje recién creado.The server responds to the CreateItem request with a CreateItemResponse message that includes a ResponseCode value of NoError, which indicates that the email was created successfully, and the ItemId of the newly created message.

Enviar un borrador de mensaje de correo electrónico mediante la API administrada de EWSSend a draft email message by using the EWS Managed API

En el siguiente ejemplo de código se muestra cómo enviar un mensaje que se almacenó en la carpeta Borradores, como se muestra en crear un mensaje de correo electrónico mediante la API administrada de EWS.The following code example shows how to send a message that was stored in the Drafts folder, as shown in Create an email message by using the EWS Managed API. En primer lugar, use el método BIND para recuperar el mensaje y, a continuación, use el método send para enviar el mensaje de correo electrónico, como se muestra en el siguiente ejemplo de código.First, use the Bind method to retrieve the message, and then use the Send method to send the email message, as shown in the following code example. Tenga en cuenta que este método no guarda el mensaje enviado en la carpeta elementos enviados.Note that this method does not save the sent message in the Sent Items folder.

En este caso, las propiedades EmailMessageSchema. Subject y EmailMessageSchema. ToRecipients se agregan a la PropertySet para que los valores se puedan incluir en el resultado de la consola.In this case, the EmailMessageSchema.Subject and EmailMessageSchema.ToRecipients properties are added to the PropertySet so that the values can be included in the console output.

En este ejemplo se supone que el servicio es un objeto ExchangeService válido y que el usuario se ha autenticado en un servidor de Exchange.This example assumes that service is a valid ExchangeService object and that the user has been authenticated to an 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] + "'.");

Enviar un borrador de mensaje de correo electrónico mediante EWSSend a draft email message by using EWS

Los ejemplos de código siguientes muestran cómo enviar un mensaje que se almacenó anteriormente en la carpeta Borradores, como se muestra en crear un mensaje de correo electrónico mediante EWS.The following code examples show how to send a message that was previously stored in the Drafts folder, as shown in Create an email message by using EWS. En primer lugar, use la operación GetItem para recuperar el mensaje de correo electrónico que se va a enviar.First use the GetItem operation to retrieve the email message to send. A continuación, use la operación SendItem para enviar el mensaje de correo electrónico a los destinatarios y guárdelo en la carpeta elementos enviados.Then use the SendItem operation to send the email message to recipients and save it in the Sent Items folder.

El primer mensaje, el mensaje de solicitud GetItem , especifica el Itemid del borrador del mensaje de correo electrónico al que se va a enlazar y los elementos del elemento ItemShape limitan los resultados para incluirlos en la respuesta GetItem .The first message, the GetItem request message, specifies the ItemId of the draft email message to bind to, and elements in the ItemShape element limit the results to include in the GetItem response. El elemento ItemShape tiene un BaseShape de IdOnlyy el elemento AdditionalProperties incluye los valores FieldURI de la propiedad Subject del esquema de elementos y la propiedad ToRecipients del esquema del mensaje, lo que significa que solo se devolverán al cliente los elementos Itemid, Subjecty ToRecipients en la respuesta.The ItemShape element has a BaseShape of IdOnly, and the AdditionalProperties element includes the FieldURI values for the Subject property from the Item schema and the ToRecipients property from the Message schema, which means that only the ItemId, Subject, and ToRecipients elements will be returned to the client in the response. Para obtener más información sobre cómo limitar los valores devueltos en las llamadas y el significado del elemento BaseShape , vea Property sets and Response Shapes in EWS in Exchange.For more information about limiting the values returned in calls and the meaning of the BaseShape element, see Property sets and response shapes in EWS in Exchange.

Esta es también la solicitud XML que la API administrada de EWS envía al llamar al método BIND .This is also the XML request that is sent by the EWS Managed API when calling the Bind method. Los valores de algunos atributos y elementos se han abreviado para facilitar su lectura.The values of some attributes and elements have been shortened for readability.

<?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>

En el ejemplo siguiente se muestra la respuesta XML que devuelve el servidor después de procesar la operación GetItem . La respuesta indica que el mensaje de correo electrónico se ha recuperado correctamente e incluye los elementos Subject y ToRecipient según se ha solicitado. Los valores de algunos atributos y elementos se han abreviado para facilitar su lectura.The values of some attributes and elements have been shortened for readability.

<?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>

El segundo mensaje, el mensaje de solicitud SendItem , especifica el Itemid del mensaje de correo electrónico que se envía, así como la SavedItemFolderId, que especifica la carpeta en la que se va a guardar el elemento enviado.The second message, the SendItem request message, specifies the ItemId of the email message to send, as well as the SavedItemFolderId, which specifies the folder in which to save the sent item.

<?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>

El servidor responde a la solicitud SendItem con un mensaje SendItemResponse que incluye un ResponseCode valor de NoError, lo que indica que el correo electrónico se envió correctamente.The server responds to the SendItem request with a SendItemResponse message that includes a ResponseCode value of NoError, which indicates that the email was sent successfully.

Enviar un mensaje de correo electrónico retrasado mediante la API administrada de EWSSend a delayed email message by using the EWS Managed API

En el ejemplo de código siguiente se muestra cómo usar el objeto EmailMessage para crear un mensaje de correo electrónico, la clase ExtendedPropertyDefinition para crear una definición de propiedad para la propiedad PidTagDeferredSendTime (0x3FEF0040) y el método SendAndSaveCopy para enviar un mensaje retrasado y guardar el mensaje en la carpeta elementos enviados.The following code example shows how to use the EmailMessage object to create an email message, the ExtendedPropertyDefinition class to create a property definition for the PidTagDeferredSendTime (0x3FEF0040) property, and the SendAndSaveCopy method to send a delayed message and save the message in the Sent Items folder.

En este ejemplo se supone que el servicio es un objeto ExchangeService válido y que el usuario se ha autenticado en un servidor de Exchange.This example assumes that service is a valid ExchangeService object and that the user has been authenticated to an 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();

Enviar un mensaje de correo electrónico retrasado mediante EWSSend a delayed email message by using EWS

El siguiente ejemplo de código muestra cómo utilizar la operación CreateItem con un valor MessageDisposition de SendAndSaveCopy para crear un mensaje de correo electrónico, el elemento las extendedproperty para crear una definición de propiedad para la propiedad PidTagDeferredSendTime (0x3FEF0040) para establecer una hora para enviar el mensaje y el elemento SavedItemFolderId para guardar el mensaje enviado en la carpeta elementos enviados.The following code example shows how to use the CreateItem operation with a MessageDisposition value of SendAndSaveCopy to create an email message, the ExtendedProperty element to create a property definition for the PidTagDeferredSendTime (0x3FEF0040) property to set a time to send the message, and the SavedItemFolderId element to save the sent message in the Sent Items folder.

<?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>

El servidor responde a la solicitud CreateItem con un mensaje CreateItemResponse que incluye un valor ResponseCode de NoError, que indica que el correo electrónico se ha creado correctamente y el Itemid del mensaje recién creado.The server responds to the CreateItem request with a CreateItemResponse message that includes a ResponseCode value of NoError, which indicates that the email was created successfully, and the ItemId of the newly created message.

Vea tambiénSee also