Envío de mensajes de correo electrónico mediante EWS en 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.
Tanto si usa la API administrada de EWS como EWS, puede enviar mensajes de correo electrónico de dos maneras. Puede enviar un mensaje existente, como un mensaje almacenado en la carpeta Borradores, o bien puede crear y enviar un correo electrónico en un paso. Los métodos y las operaciones que se usan para enviar el mensaje son los mismos tanto si envía un mensaje inmediatamente como si envía un mensaje retrasado.
Tabla 1. Métodos de API administrada de EWS y operaciones de EWS para enviar mensajes de correo electrónico
Task | Método de la API administrada de EWS | Operación de EWS |
---|---|---|
Enviar un nuevo mensaje de correo electrónico |
EmailMessage.SendAndSaveCopy |
CreateItem |
Envío de un mensaje de correo electrónico existente |
EmailMessage.Send |
SendItem |
Envío de un nuevo mensaje de correo electrónico mediante la API administrada de EWS
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.
En este ejemplo se supone que service es un objeto ExchangeService válido y que el usuario se ha autenticado en un 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.");
Envío de un nuevo mensaje de correo electrónico mediante EWS
En el ejemplo de código siguiente se muestra cómo usar 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. Esta es también la solicitud XML que la API administrada de EWS envía al enviar un nuevo mensaje de correo electrónico.
<?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>
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 creó correctamente y el ItemId del mensaje recién creado.
Envío de un borrador de mensaje de correo electrónico mediante la API administrada de EWS
En el ejemplo de código siguiente se muestra cómo enviar un mensaje almacenado en la carpeta Borradores, como se muestra en Creación de un mensaje de correo electrónico mediante la API administrada de EWS. 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 ejemplo de código siguiente. Tenga en cuenta que este método no guarda el mensaje enviado en la carpeta Elementos enviados.
En este caso, las propiedades EmailMessageSchema.Subject y EmailMessageSchema.ToRecipients se agregan al PropertySet para que los valores se puedan incluir en la salida de la consola.
En este ejemplo se supone que service es un objeto ExchangeService válido y que el usuario se ha autenticado en un 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] + "'.");
Envío de un borrador de mensaje de correo electrónico mediante EWS
En los ejemplos de código siguientes se muestra cómo enviar un mensaje que se almacenó anteriormente en la carpeta Borradores, como se muestra en Creación de un mensaje de correo electrónico mediante EWS. En primer lugar, use la operación GetItem para recuperar el mensaje de correo electrónico que se va a enviar. A continuación, use la operación SendItem para enviar el mensaje de correo electrónico a los destinatarios y guardarlo en la carpeta Elementos enviados.
El primer mensaje, el mensaje de solicitud GetItem , especifica el ItemId del borrador de mensaje de correo electrónico al que se va a enlazar y los elementos del elemento ItemShape limitan los resultados que se van a incluir en la respuesta GetItem . El elemento ItemShape tiene una baseShape de IdOnly y el elemento AdditionalProperties incluye los valores FieldURI para la propiedad Subject del esquema Item y la propiedad ToRecipients del esquema Message, lo que significa que solo los elementos ItemId, Subject y ToRecipients se devolverán al cliente en la respuesta. Para obtener más información sobre cómo limitar los valores devueltos en las llamadas y el significado del elemento BaseShape , vea Conjuntos de propiedades y formas de respuesta en EWS en Exchange.
Esta es también la solicitud XML que envía la API administrada de EWS al llamar al método Bind . Los valores de algunos atributos y elementos se han acortado para mejorar la legibilidad.
<?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>
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 recuperó correctamente e incluye los elementos Subject y ToRecipient según lo solicitado. Los valores de algunos atributos y elementos se han acortado para mejorar la legibilidad.
<?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>
El segundo mensaje, el mensaje de solicitud SendItem , especifica el ItemId del mensaje de correo electrónico que se va a enviar, así como SavedItemFolderId, que especifica la carpeta en la que se va a guardar el elemento 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>
El servidor responde a la solicitud SendItem con un mensaje SendItemResponse que incluye un valor ResponseCode de NoError, lo que indica que el correo electrónico se envió correctamente.
Envío de un mensaje de correo electrónico retrasado mediante la API administrada de EWS
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.
En este ejemplo se supone que service es un objeto ExchangeService válido y que el usuario se ha autenticado en un 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();
Envío de un mensaje de correo electrónico retrasado mediante EWS
En el ejemplo de código siguiente se muestra cómo usar la operación CreateItem con un valor MessageDisposition de SendAndSaveCopy para crear un mensaje de correo electrónico, el elemento 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.
<?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>
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 creó correctamente y el ItemId del mensaje recién creado.