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 após o processamento de todas as mensagens de saída, e quando ocorre um erro crítico. Alguns clientes precisam permanecer conectados para que as mensagens de saída pendentes possam alcançar o provedor de transporte e o sistema de mensagens de destino. Se esse cliente enviar uma mensagem e fizer logoff 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

  1. Cancele os registros de todas as notificações chamando o método Unadvise de cada objeto registrado.

  2. Libere todos os objetos abertos chamando seus métodos IUnknown::Release . Os tipos de objetos abertos podem incluir coletores de aconselhamento, a tabela de status, a pasta Caixa de Saída, um ou mais armazenamentos de mensagens e o catálogo de endereços.

  3. Chame MAPIFreeBuffer para liberar a memória para qualquer identificador de entrada em cache, como PR_IPM_SUBTREE_ENTRYID (PidTagIpmSubtreeEntryId).

  4. Chame IMAPISession::Logoff, definindo o sinalizador de MAPI_LOGOFF_UI se você permitir uma interface do usuário e o sinalizador de MAPI_LOGOFF_SHARED se você for o proprietário da sessão compartilhada atual. O logoff notifica todos os outros clientes que estão usando a sessão compartilhada atual de que eles devem fazer logoff enviando uma notificação de erro.

  5. Libere o ponteiro da sessão chamando o método IUnknown::Release da sessão.

  6. Se você chamou OleInitialize durante a inicialização da sessão para inicializar as bibliotecas OLE, não inicialize-as agora chamando OleUninitialize. Somente os clientes que chamaram OleInitialize devem chamar OleUninitialize.

  7. Não inicialize as bibliotecas MAPI chamando MAPIUninitialize. Se você chamou OleInitialize em algum momento, verifique se uma chamada para OleUninitialize ocorre antes dessa chamada para MAPIUninitialize. O momento é crucial. Se a chamada para OleUninitialize seguir a chamada para MAPIUninitialize, o cliente poderá ser encerrado anormalmente.

  8. Se você chamou ScInitMapiUtil durante a inicialização da sessão para inicializar a biblioteca de utilitários MAPI, não inicialize-a agora chamando DeinitMapiUtil. Somente os clientes que chamaram ScInitMapiUtil devem chamar DeinitMapiUtil.

Observação

Todos os objetos abertos devem ser liberados antes da chamada para IMAPISession::Logoff. Os objetos que permanecem abertos após Logoff ser chamado tornam-se inválidos; eles não podem aceitar nenhuma ligação e podem nunca ser libertados. Se uma chamada for feita para um desses objetos, espere que a chamada falhe.

O MAPI não tem nenhum 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 mensagens com o evento MSG_SERVICE_INSTALL.