Manipular notificações do repositório de mensagens

Aplica-se a: Outlook 2013 | Outlook 2016

Para se registrar para notificações de repositório de mensagens, chame o método IMAPISession::Advise ou IMsgStore::Advise e especifique um repositório de mensagens, uma pasta ou um identificador de entrada de mensagem no conteúdo do parâmetro lpEntryID . Os provedores de repositório de mensagens dão suporte a notificações de objeto e de tabela. O fato de você se registrar com objetos de repositório de mensagens específicos, com a hierarquia de pastas e tabelas de conteúdo que descrevem esses objetos ou com objetos e tabelas, depende das notificações que você espera ver, das chamadas feitas para executar operações e de como o provedor do repositório de mensagens dá suporte à notificação.

Como o MAPI permite flexibilidade na forma como os provedores dão suporte a notificações, esteja ciente de que você nem sempre receberá o mesmo tipo de notificação em resposta a um evento específico de todos os provedores de repositório de mensagens. Alguns provedores de repositório de mensagens não dão suporte a notificações. Para determinar se o repositório de mensagens que você está usando dá suporte à notificação, procure o bit de STORE_NOTIFY_OK na propriedade PR_STORE_SUPPORT_MASK (PidTagStoreSupportMask).

Em uma extremidade do espectro de provedores de repositório de mensagens que dão suporte à notificação estão os provedores que geram notificações "avançadas"; Esses provedores enviam notificações descritivas para todas as fontes de aviso registradas. Na outra extremidade estão os provedores de repositório de mensagens que dão suporte a notificações limitadas; Esses provedores enviam notificações gerais para um número restrito de fontes de aconselhamento.

Por exemplo, se você copiar uma mensagem para uma pasta na qual você se registrou para receber notificações de objeto copiado e movido por objeto, poderá ou não receber a notificação de objeto copiado. O recebimento ou não depende de:

  • O método que você chamou para executar a cópia. Pode ser IMAPIFolder::CopyMessages, IMAPIProp::CopyTo ou IMAPIProp::CopyProps.

  • Como o provedor do repositório de mensagens implementa o método de cópia.

  • Se o provedor do repositório de mensagens suporta ou não notificações copiadas de objeto em pastas.

Como não há diretrizes rígidas que descrevam como implementar a notificação de eventos para provedores de repositório de mensagens, os clientes não podem esperar um comportamento consistente. O MAPI faz recomendações sobre como os provedores de repositório de mensagens implementam a notificação de eventos, e a tabela a seguir descreve essas recomendações. Leia a tabela da seguinte maneira: Depois de executar a operação na primeira coluna, espere receber uma notificação do tipo listado na segunda coluna se você tiver se registrado para esse tipo com o objeto listado na terceira coluna. Por exemplo, depois de criar uma pasta, você receberá uma notificação fnevObjectCreated somente se tiver se registrado para notificações fnevObjectCreated com o repositório de mensagens.

Operação Tipo de evento Origem do aviso
Criar uma pasta
fnevObjectCreated
Repositório de mensagens
Excluir uma pasta
fnevObjectDeleted
Repositório de mensagens Pasta excluída
Mova uma pasta de uma pasta para outra
fnevObjectMoved
Repositório de mensagens Pasta movida
Copiar uma pasta de uma pasta para outra
fnevObjectCopied
Repositório de mensagens e pasta copiada (nenhuma notificação fnevObjectCreated enviada para a nova cópia da pasta)
Alteração em uma propriedade de pasta computada (PR_SUBFOLDERS (PidTagSubfolders), PR_CONTENT_UNREAD (PidTagContentUnreadCount) PR_CONTENT_COUNT (PidTagContentCount)
fnevObjectModified
Repositório de mensagens Pasta alterada (sem notificação para a pasta pai)
Criar uma mensagem
fnevObjectCreated
Repositório de mensagens
Exclua uma mensagem, causando uma alteração na propriedade PR_CONTENT_COUNT da pasta pai
fnevObjectDeleted
Repositório de mensagens Mensagem excluída
Mover uma mensagem de uma pasta para outra
fnevObjectMoved
Repositório de mensagens Mensagem movida
Copiar uma mensagem de uma pasta para outra
fnevObjectCopied
Repositório de mensagens Mensagem copiada (sem notificação fnevObjectCreated para nova cópia da mensagem)
Salvar uma mensagem, causando uma alteração na propriedade PR_CONTENT_COUNT da pasta pai
fnevObjectCreated
Repositório de mensagens somente no primeiro salvamento
Salvar uma mensagem
fnevObjectModified
Repositório de mensagens ao salvar após o primeiro salvamento Mensagem alterada (nenhuma notificação para a pasta pai)
Concluir uma operação de pesquisa
fnevSearchComplete
Repositório de mensagens Pasta de pesquisa
Nova mensagem
fnevNewMail
Repositório de mensagens

Observação

Quando você receber uma notificação de objeto modificado, lembre-se de que a parte da matriz de marca de propriedade da estrutura de OBJECT_NOTIFICATION apontada pelo parâmetro lpNotifications na chamada OnNotify pode ou não ser NULL. Os provedores de repositório de mensagens não são obrigados a inserir informações de propriedade nessa matriz e a maioria não. Verifique se o método OnNotify pode lidar com o caso em que o ponteiro lpPropTagArray é NULL.

Para a maioria, se não todas as notificações de objeto, atualize o modo de exibição da pasta ou pastas afetadas.