Manipular notificações do repositório de mensagens
Aplica-se a: Outlook 2013 | Outlook 2016
Para se registrar em notificações do repositório de mensagens, chame o método IMAPISession::Advise ou IMsgStore::Advise e especifique um repositório de mensagens, pasta ou identificador de entrada de mensagem no conteúdo do parâmetro lpEntryID . Os provedores do repositório de mensagens dão suporte a notificações de objeto e tabela. Se você se registra com objetos específicos do repositório de mensagens, 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 que você faz 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, saiba que nem sempre você receberá o mesmo tipo de notificação em resposta a um evento específico de todos os provedores do repositório de mensagens. Alguns provedores do 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 a STORE_NOTIFY_OK bit em sua 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 "ricas"; esses provedores enviam notificações descritivas para todas as fontes de consultoria registradas. Na outra extremidade estão os provedores do 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 com a qual se registrou para receber notificações copiadas e movidas por objeto, poderá ou não receber a notificação copiada pelo objeto. Se você recebe ou não depende de:
O método que você chamou para executar a cópia. Isso 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 dá suporte ou não a notificações copiadas por objeto em pastas.
Como não há diretrizes estritas que descrevem como implementar a notificação de eventos para provedores de armazenamento de mensagens, os clientes não podem esperar um comportamento consistente. O MAPI faz recomendações sobre como os provedores do 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 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 registrado para notificações fnevObjectCreated com o repositório de mensagens.
Operação | Tipo de evento | Aconselhar fonte |
---|---|---|
Criar uma pasta |
fnevObjectCreated |
Repositório de mensagens |
Excluir uma pasta |
fnevObjectDeleted |
Pasta excluída do repositório de mensagens |
Mover uma pasta de uma pasta para outra |
fnevObjectMoved |
Pasta movida do repositório de mensagens |
Copiar uma pasta de uma pasta para outra |
fnevObjectCopied |
Armazenamento 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 |
Pasta alterada do repositório de mensagens (nenhuma notificação à pasta pai) |
Criar uma mensagem |
fnevObjectCreated |
Repositório de mensagens |
Excluir uma mensagem, causando uma alteração na propriedade PR_CONTENT_COUNT da pasta pai |
fnevObjectDeleted |
Mensagem excluída do repositório de mensagens |
Mover uma mensagem de uma pasta para outra |
fnevObjectMoved |
Mensagem movida do repositório de mensagens |
Copiar uma mensagem de uma pasta para outra |
fnevObjectCopied |
Mensagem copiada do repositório de mensagens (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 na primeira salvação |
Salvar uma mensagem |
fnevObjectModified |
Armazenamento de mensagens em salvamentos após a primeira mensagem salvar Alterada (nenhuma notificação para a pasta pai) |
Concluir uma operação de pesquisa |
fnevSearchComplete |
Pasta Pesquisa do repositório de mensagens |
Nova mensagem |
fnevNewMail |
Repositório de mensagens |
Observação
Ao receber uma notificação modificada por objeto, lembre-se de que a parte da matriz de marca de propriedade da estrutura OBJECT_NOTIFICATION apontada pelo parâmetro lpNotifications na chamada OnNotify pode ou não ser NULL. Os provedores do repositório de mensagens não são necessários para inserir informações de propriedade nesta 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 a exibição da pasta ou pastas afetadas.