Extraer notificaciones sobre eventos de buzón de correo mediante EWS en ExchangePull notifications about mailbox events by using EWS in Exchange

Descubra cómo usar la API administrada de EWS o EWS para suscribirse a notificaciones de extracción y obtener eventos.Find out how to use the EWS Managed API or EWS to subscribe to pull notifications and get events.

EWS en Exchange usa notificaciones de extracción para permitir que los clientes soliciten (o extraigan) notificaciones sobre cambios en el buzón de correo desde el servidor al cliente.EWS in Exchange uses pull notifications to enable clients to request (or pull) notifications about changes to the mailbox from the server to the client.

Si se está suscribiendo para extraer notificaciones mediante la API administrada de EWS, puede suscribirse a las notificaciones de extracción y obtenerlas mediante el método SubscribeToPullNotifications .If you're subscribing to pull notifications by using the EWS Managed API, you subscribe to and get pull notifications by using the SubscribeToPullNotifications method. A continuación, se obtienen los eventos del servidor mediante el método GetEvents .You then get events from the server by using the GetEvents method.

Para suscribirse a las notificaciones de extracción mediante EWS, se crea una suscripción mediante la operación subscribe, se analiza la respuesta y, a continuación, se obtienen las notificaciones mediante la operación GetEvents.To subscribe to pull notifications by using EWS, you create a subscription by using the Subscribe operation, parse the response, and then get the notifications by using the GetEvents operation.

Una vez que el cliente recibe notificaciones de los elementos que se han cambiado o que se han creado en el servidor, puede sincronizar los cambios.After the client receives notifications of items that are changed or created on the server, it can then synchronize the changes.

Suscribirse a y obtener notificaciones de extracción mediante la API administrada de EWSSubscribe to and get pull notifications by using the EWS Managed API

En el ejemplo de código siguiente se muestra cómo usar el método SubscribeToPullNotifications para suscribirse a las notificaciones de extracción para todos los eventos de la carpeta Bandeja de entrada.The following code example shows how to use the SubscribeToPullNotifications method to subscribe to pull notifications for all events in the Inbox folder. A continuación, en el ejemplo se usa el método GetEvents para recuperar los eventos del servidor.The example then uses the GetEvents method to retrieve events from the server. En este ejemplo, se supone que el servicio es un enlace ExchangeService válido.In this example, we assume that service is a valid ExchangeService binding.

// Subscribe to pull notifications in the Inbox.
PullSubscription subscription = service.SubscribeToPullNotifications( 
    new FolderId[] { WellKnownFolderName.Inbox }, 30, null, 
    EventType.NewMail, EventType.Created, EventType.Deleted,
    EventType.Modified, EventType.Moved, EventType.Copied, EventType.FreeBusyChanged); 
 
// Call GetEvents to retrieve events from the server. 
GetEventsResults events = subscription.GetEvents(); 

Después de recibir un evento del servidor, puede sincronizar esos cambios con el servidor.After you receive an event from the server, you can synchronize those changes with the server. Use uno de los métodos de cancelación de suscripción especificados en ¿Cómo puedo cancelar la suscripción a las notificaciones? para finalizar la suscripción con el servidor cuando la suscripción ya no se necesite.Use one of the unsubscribe methods specified in How do I unsubscribe to notifications? to end the subscription with the server when the subscription is no longer needed.

Suscribirse a notificaciones de extracción mediante EWSSubscribe to pull notifications by using EWS

En el ejemplo siguiente se muestra la solicitud XML que se va a enviar al servidor para suscribirse a todos los EventTypes de la carpeta Bandeja de entrada mediante la operación subscribe.The following example shows the XML request to send to the server to subscribe to all EventTypes in the Inbox folder by using the Subscribe operation. También es la solicitud XML que la API administrada de EWS envía al suscribirse para extraer notificaciones mediante el método SubscribeToPullNotifications .This is also the XML request that the EWS Managed API sends when subscribing to pull notifications by using the SubscribeToPullNotifications method.

<?xml version="1.0" encoding="utf-8"?>
<Subscribe xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PullSubscriptionRequest xmlns="https://schemas.microsoft.com/exchange/services/2006/messages">
    <FolderIds xmlns="https://schemas.microsoft.com/exchange/services/2006/types">
      <DistinguishedFolderId Id="inbox" />
    </FolderIds>
    <EventTypes xmlns="https://schemas.microsoft.com/exchange/services/2006/types">
            <EventType>NewMailEvent</EventType>
            <EventType>CreatedEvent</EventType>
            <EventType>DeletedEvent</EventType>
            <EventType>ModifiedEvent</EventType>
            <EventType>MovedEvent</EventType>
            <EventType>CopiedEvent</EventType>
            <EventType>FreeBusyChangedEvent</EventType>
    </EventTypes>
    <Timeout xmlns="https://schemas.microsoft.com/exchange/services/2006/types">30</Timeout>
  </PullSubscriptionRequest>
</Subscribe>

El siguiente ejemplo de XML muestra el mensaje SubscribeResponse que se envía desde el servidor al cliente en respuesta a la solicitud de operación de suscripción .The following XML example shows the SubscribeResponse message that is sent from the server to the client in response to the Subscribe operation request. La inclusión del valor NoError para el elemento ResponseCode significa que la suscripción se ha creado correctamente.The inclusion of the NoError value for the ResponseCode element means that the subscription was created successfully. El elemento SubscriptionId identifica de forma exclusiva la suscripción de notificaciones de extracción en el servidor.The SubscriptionId element uniquely identifies the pull notification subscription on the server. El elemento marca de agua representa un marcador en la cola de eventos del buzón.The Watermark element represents a bookmark in the mailbox event queue.

<?xml version="1.0" encoding="utf-8"?>
<SubscribeResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ResponseMessages xmlns="https://schemas.microsoft.com/exchange/services/2006/messages">
    <SubscribeResponseMessage ResponseClass="Success">
      <ResponseCode>NoError</ResponseCode>
      <SubscriptionId>d581ab79-a2ec-4653-9c8e-564d7cfc1d8c</SubscriptionId>
      <Watermark>AAAAAGUhAAAAAAAAAQ==</Watermark>
    </SubscribeResponseMessage>
  </ResponseMessages>
</SubscribeResponse>

Después de crear la suscripción, ahora puede obtener eventos mediante el SubscriptionId que se devuelve en el mensaje SubscribeResponse .After creating the subscription, you can now get events by using the SubscriptionId that is returned in the SubscribeResponse message.

Obtener notificaciones de extracción mediante EWSGet pull notifications by using EWS

El siguiente ejemplo de XML muestra el mensaje de solicitud de operación GetEvents que se envía desde el cliente al servidor para obtener notificaciones para el SubscriptionId que se devuelve en el mensaje SubscribeResponse .The following XML example shows the GetEvents operation request message that is sent from the client to the server to get notifications for the SubscriptionId that is returned in the SubscribeResponse message. Para la primera solicitud GetEvents , use la marca de agua devuelta en la respuesta de suscripción .For the first GetEvents request, use the Watermark returned in the Subscribe response. Para las siguientes solicitudes GetEvents , use la última marca de agua devuelta en la solicitud GetEvents anterior.For subsequent GetEvents requests, use the last Watermark that was returned in the previous GetEvents request.

<?xml version="1.0" encoding="utf-8"?>
<GetEvents xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SubscriptionId xmlns="https://schemas.microsoft.com/exchange/services/2006/messages">d581ab79-a2ec-4653-9c8e-564d7cfc1d8c</SubscriptionId>
  <Watermark xmlns="https://schemas.microsoft.com/exchange/services/2006/messages">AAAAAGUhAAAAAAAAAQ==</Watermark>
</GetEvents>

El siguiente ejemplo de XML muestra el mensaje de respuesta GetEvents que se envía desde el servidor al cliente.The following XML example shows the GetEvents response message that is sent from the server to the client. Cada respuesta GetEvents incluye información sobre uno o más eventos.Each GetEvents response includes information about one or more events. Se devuelve una marca de agua para cada evento.A Watermark is returned for each event. La última marca de agua debe guardarse y usarse en la siguiente solicitud GetEvents .The last Watermark must be saved and used in the next GetEvents request. Si no se han producido eventos de almacenamiento desde la última solicitud GetEvents , se devuelve un evento status.If no store events have occurred since the last GetEvents request, a status event is returned.

<?xml version="1.0" encoding="utf-8"?>
<GetEventsResponseType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                       xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ResponseMessages xmlns="https://schemas.microsoft.com/exchange/services/2006/messages">
    <GetEventsResponseMessage ResponseClass="Success">
      <ResponseCode>NoError</ResponseCode>
      <Notification>
        <SubscriptionId xmlns="https://schemas.microsoft.com/exchange/services/2006/types">d581ab79-a2ec-4653-9c8e-564d7cfc1d8c</SubscriptionId>
        <PreviousWatermark xmlns="https://schemas.microsoft.com/exchange/services/2006/types">AAAAAGUhAAAAAAAAAQ==</PreviousWatermark>
        <MoreEvents xmlns="https://schemas.microsoft.com/exchange/services/2006/types">false</MoreEvents>
        <NewMailEvent xmlns="https://schemas.microsoft.com/exchange/services/2006/types">
          <Watermark>AAAAAHMhAAAAAAAAAQ==</Watermark>
          <TimeStamp>2013-09-15T21:37:01Z</TimeStamp>
          <ItemId Id="AAAtA=" ChangeKey="CQAAAA==" />
          <ParentFolderId Id="AQAtAEFkbWA==" ChangeKey="AQAAAA==" />
        </NewMailEvent>
      </Notification>
    </GetEventsResponseMessage>
  </ResponseMessages>
</GetEventsResponse>

Después de recibir un evento del servidor, sincronice los cambios en el cliente. Use la operación unsubscribe para finalizar la suscripción con el servidor cuando ya no se necesite la suscripción.Use the Unsubscribe operation to end the subscription with the server when the subscription is no longer needed.

Siguientes pasosNext steps

Una vez que haya recibido las notificaciones, puede sincronizar la jerarquía de carpetas o sincronizar el contenido de la carpeta que ha cambiado.After you're received notifications, you can sync the folder hierarchy or sync the contents of the folder that changed.

Vea tambiénSee also