Receber notificações sobre eventos de caixa de correio usando o EWS no ExchangePull notifications about mailbox events by using EWS in Exchange

Descubra como usar a API gerenciada do EWS ou o EWS para se inscrever em notificações de recebimento e obter eventos.Find out how to use the EWS Managed API or EWS to subscribe to pull notifications and get events.

O EWS no Exchange usa notificações de recebimento para permitir que clientes solicitem (ou recebam) notificações sobre alterações na caixa de correio do servidor para o 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.

Se você estiver assinando notificações de recepção usando a API gerenciada do EWS, assine e receba notificações de recebimento usando o 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. Em seguida, você obtém eventos do servidor usando o método GetEvents .You then get events from the server by using the GetEvents method.

Para se inscrever em notificações de recebimento usando o EWS, você cria uma assinatura usando a operação Subscribe, analisa a resposta e, em seguida, Obtém as notificações usando a operação 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.

Depois que o cliente recebe notificações de itens que são alterados ou criados no servidor, ele pode sincronizar as alterações.After the client receives notifications of items that are changed or created on the server, it can then synchronize the changes.

Inscrever-se e obter notificações de recebimento usando a API gerenciada do EWSSubscribe to and get pull notifications by using the EWS Managed API

O exemplo de código a seguir mostra como usar o método SubscribeToPullNotifications para inscrever-se para receber notificações de todos os eventos na pasta caixa 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. O exemplo, em seguida, usa o método GetEvents para recuperar eventos do servidor.The example then uses the GetEvents method to retrieve events from the server. Neste exemplo, assumimos que Service é uma associação ExchangeService válida.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(); 

Após receber um evento do servidor, você pode sincronizar essas alterações com o servidor.After you receive an event from the server, you can synchronize those changes with the server. Use um dos métodos de cancelamento de assinatura especificados em como eu cancelo a inscrição para notificações? para encerrar a assinatura com o servidor quando a assinatura não for mais necessária.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.

Assinar notificações de recebimento usando EWSSubscribe to pull notifications by using EWS

O exemplo a seguir mostra a solicitação XML a ser enviada ao servidor para inscrever-se em todos os EventTypes da pasta caixa de entrada usando a operação inscrever.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. Essa é também a solicitação XML que a API gerenciada do EWS envia ao assinar notificações de recebimento usando o 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>

O exemplo de XML a seguir mostra a mensagem SubscribeResponse que é enviada do servidor para o cliente em resposta à solicitação de operação de assinatura .The following XML example shows the SubscribeResponse message that is sent from the server to the client in response to the Subscribe operation request. A inclusão do valor NoError para o elemento ResponseCode significa que a assinatura foi criada com êxito.The inclusion of the NoError value for the ResponseCode element means that the subscription was created successfully. O elemento SubscriptionId identifica exclusivamente a assinatura de notificação pull no servidor.The SubscriptionId element uniquely identifies the pull notification subscription on the server. O elemento Watermark representa um indicador na fila de eventos da caixa de correio.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>

Depois de criar a assinatura, agora você pode obter eventos usando o SubscriptionId que é retornado na mensagem SubscribeResponse .After creating the subscription, you can now get events by using the SubscriptionId that is returned in the SubscribeResponse message.

Obter notificações de recepção usando o EWSGet pull notifications by using EWS

O exemplo de XML a seguir mostra a mensagem de solicitação de operação GetEvents que é enviada do cliente para o servidor para obter notificações para a SubscriptionId retornada na mensagem 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 a primeira solicitação GetEvents , use a marca d' água retornada na resposta de assinatura .For the first GetEvents request, use the Watermark returned in the Subscribe response. Para solicitações GetEvents subsequentes, use a última marca d' água que foi retornada na solicitação 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>

O exemplo de XML a seguir mostra a mensagem de resposta GetEvents que é enviada do servidor para o cliente.The following XML example shows the GetEvents response message that is sent from the server to the client. Cada resposta GetEvents inclui informações sobre um ou mais eventos.Each GetEvents response includes information about one or more events. Uma marca d' água é retornada para cada evento.A Watermark is returned for each event. A última marca d' água deve ser salva e usada na próxima solicitação GetEvents .The last Watermark must be saved and used in the next GetEvents request. Se nenhum evento de armazenamento tiver ocorrido desde a última solicitação GetEvents , um evento status será retornado.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>

Após receber um evento do servidor, sincronize as alterações no cliente. Use a operação de cancelamento de assinatura para finalizar a assinatura com o servidor quando a assinatura não for mais necessária.Use the Unsubscribe operation to end the subscription with the server when the subscription is no longer needed.

Próximas etapasNext steps

Após receber notificações, você pode sincronizar a hierarquia de pastas ou sincronizar o conteúdo da pasta que foi alterada.After you're received notifications, you can sync the folder hierarchy or sync the contents of the folder that changed.

Confira tambémSee also