Finalización de una sesión MAPI
Hace referencia a: Outlook 2013 | Outlook 2016
Los clientes pueden finalizar sus sesiones en respuesta a la solicitud de un usuario, ya sea inmediatamente o después de que se hayan procesado todos los mensajes salientes y cuando se produzca un error crítico. Algunos clientes deben mantener la sesión iniciada para que los mensajes salientes pendientes puedan llegar al proveedor de transporte y al sistema de mensajería de destino. Si dicho cliente envía un mensaje y cierra sesión inmediatamente, el mensaje puede permanecer en la cola saliente hasta que un usuario vuelva a iniciar sesión y permanezca conectado el tiempo suficiente para que se transmita el mensaje.
Cuando necesite finalizar la sesión con el subsistema MAPI
Cancele los registros de todas las notificaciones llamando al método Unadvise de cada objeto registrado.
Libere todos los objetos abiertos llamando a sus métodos IUnknown::Release . Los tipos de objetos abiertos pueden incluir receptores de aviso, la tabla de estado, la carpeta Bandeja de salida, uno o varios almacenes de mensajes y la libreta de direcciones.
Llame a MAPIFreeBuffer para liberar la memoria de los identificadores de entrada almacenados en caché, como PR_IPM_SUBTREE_ENTRYID (PidTagIpmSubtreeEntryId).
Llame a IMAPISession::Logoff, estableciendo la marca MAPI_LOGOFF_UI si permite una interfaz de usuario y la marca MAPI_LOGOFF_SHARED si es propietario de la sesión compartida actual. El cierre de sesión notifica a todos los demás clientes que usan la sesión compartida actual que deben cerrar la sesión mediante el envío de una notificación de error.
Libere el puntero de sesión llamando al método IUnknown::Release de la sesión.
Si llamó a OleInitialize durante el inicio de la sesión para inicializar las bibliotecas OLE, anótelas ahora mediante una llamada a OleUninitialize. Solo los clientes que han llamado a OleInitialize deben llamar a OleUninitialize.
Quite la inicialización de las bibliotecas MAPI llamando a MAPIUninitialize. Si llamó a OleInitialize en algún momento, asegúrese de que se produce una llamada a OleUninitialize antes de esta llamada a MAPIUninitialize. El tiempo es crucial. Si la llamada a OleUninitialize sigue la llamada a MAPIUninitialize, el cliente podría finalizar de forma ingrato.
Si llamó a ScInitMapiUtil durante el inicio de la sesión para inicializar la biblioteca de utilidades MAPI, anule la inicialización llamando a DeinitMapiUtil. Solo los clientes que han llamado a ScInitMapiUtil deben llamar a DeinitMapiUtil.
Nota:
Todos los objetos abiertos deben liberarse antes de la llamada a IMAPISession::Logoff. Los objetos que permanecen abiertos después de llamar a Logoff no son válidos; no pueden aceptar llamadas y nunca se pueden liberar. Si se realiza una llamada a uno de estos objetos, espere que se produzca un error en la llamada.
MAPI no tiene ningún mecanismo para eliminar archivos DLL durante el proceso de cierre de sesión. El archivo DLL de un proveedor de servicios solo se puede eliminar cuando un cliente de configuración como el Panel de control llama a su función de punto de entrada del servicio de mensajes con el evento MSG_SERVICE_INSTALL.