Encerrando uma sessão MAPI
Aplica-se a: Outlook 2013 | Outlook 2016
Os clientes podem encerrar suas sessões em resposta à solicitação de um usuário, imediatamente ou depois de todas as mensagens de saída terem sido processadas e quando ocorrer um erro crítico. Alguns clientes precisam ficar conectados para que as mensagens de saída pendentes possam chegar ao provedor de transporte e ao sistema de mensagens de destino. Se esse cliente enviar uma mensagem e fizer logon imediatamente, a mensagem poderá permanecer na fila de saída até que um usuário faça logon novamente e permaneça conectado por tempo suficiente para que a mensagem seja transmitida.
Quando você precisar encerrar sua sessão com o subsistema MAPI
Cancele os registros de todas as notificações chamando o método Unadvise de cada objeto registrado.
Libere todos os objetos abertos chamando seus métodos IUnknown::Release . Os tipos de objetos abertos podem incluir coletores de aconselhamento, a tabela status, a pasta Outbox, um ou mais repositórios de mensagens e o catálogo de endereços.
Chame MAPIFreeBuffer para liberar a memória de todos os identificadores de entrada armazenados em cache, como PR_IPM_SUBTREE_ENTRYID (PidTagIpmSubtreeEntryId).
Chame IMAPISession::Logoff, definindo o sinalizador MAPI_LOGOFF_UI se você permitir uma interface do usuário e o sinalizador MAPI_LOGOFF_SHARED se você possuir a sessão compartilhada atual. Logoff notifica todos os outros clientes que estão usando a sessão compartilhada atual que eles devem fazer logon enviando uma notificação de erro.
Solte o ponteiro da sessão chamando o método IUnknown::Release da sessão.
Se você chamou OleInitialize durante a inicialização da sessão para inicializar as bibliotecas OLE, uninitialize-as agora chamando OleUninitialize. Somente os clientes chamados OleInitialize devem chamar OleUninitialize.
Uninitialize as bibliotecas MAPI chamando MAPIUninitialize. Se você chamou OleInitialize em algum momento, certifique-se de que uma chamada para OleUninitialize ocorra antes dessa chamada para MAPIUninitialize. O momento é crucial. Se a chamada para OleUninitialize seguir a chamada para MAPIUninitialize, seu cliente poderá terminar sem graceiosamente.
Se você chamou ScInitMapiUtil durante a inicialização da sessão para inicializar a biblioteca de utilitários MAPI, uninitialize-a agora chamando DeinitMapiUtil. Somente os clientes que chamaram ScInitMapiUtil devem chamar DeinitMapiUtil.
Observação
Todos os objetos abertos devem ser lançados antes da chamada para IMAPISession::Logoff. Objetos que permanecem abertos depois que Logoff é chamado tornam-se inválidos; eles não podem aceitar chamadas e podem nunca ser libertados. Se uma chamada for feita a um desses objetos, espere que a chamada falhe.
O MAPI não tem mecanismo para excluir DLLs durante o processo de desligamento da sessão. A DLL de um provedor de serviços só pode ser excluída quando um cliente de configuração como o Painel de Controle chama sua função de ponto de entrada do serviço de mensagem com o evento MSG_SERVICE_INSTALL.