Compartir a través de


Implementación del método FlushQueues

Hace referencia a: Outlook 2013 | Outlook 2016

La cola MAPI usa el método IXPLogon::FlushQueues para descargar y cargar los mensajes pendientes hacia y desde un proveedor de transporte. Normalmente, la cola MAPI vaciará las colas de todos los proveedores de transporte que han iniciado sesión en la sesión, empezando por el primer proveedor de transporte establecido en la sección de orden de transporte del perfil del usuario. El vaciado de colas es casi siempre el resultado de una solicitud directa del usuario, por lo que el envío y la recepción de mensajes mientras se vacían las colas es sincrónico para la cola MAPI. Dado que estas llamadas son sincrónicas, el proveedor de transporte debe procesarlas lo antes posible.

Los proveedores de transporte deben controlar la llamada FlushQueues como se describe en la siguiente secuencia de pasos para habilitar el procesamiento de mensajes adecuado y para permitir que otros proveedores de transporte usen recursos externos como módems como parte de la operación FlushQueues de la cola MAPI.

Paso Componente Implementación
1. Cola MAPI
Llama al método FlushQueues para el primer proveedor de transporte que aparece en el orden de transporte del perfil del usuario, pasando las marcas solicitadas en el parámetro ulFlags . FlushQueues se llama una vez con todas las marcas establecidas para toda la operación de carga y descarga.
2. Proveedor de transporte
Debe hacer una serie de cosas antes de volver de la llamada FlushQueues . Si los mensajes enviados anteriormente se aplazan, se debe llamar al método IMAPISupport::SpoolerNotify con la marca NOTIFY_SENT_DEFERRED establecida. Tenga en cuenta que es posible que la cola MAPI cancele un mensaje que se ha aplazado antes de que el proveedor de transporte tenga la oportunidad de terminar de procesar el mensaje. Si el proveedor de transporte usa un recurso externo, como un módem, se debe establecer la conexión al recurso externo. El bit STATUS_OUTBOUND_FLUSH de la propiedad PR_STATUS_CODE (PidTagStatusCode) de la fila de estado del proveedor de transporte debe establecerse mediante el método IMAPISupport::ModifyStatusRow . A continuación, el proveedor de transporte debe devolver S_OK para la llamada FlushQueues .
3. Cola MAPI
Comprueba la fila de estado del proveedor de transporte para el bit STATUS_OUTBOUND_FLUSH y llama a IXPLogon::SubmitMessage para el primer mensaje de la cola.
4. Proveedor de transporte
Controla el mensaje y devuelve desde la llamada SubmitMessage .
5. Cola MAPI
Si el proveedor de transporte devuelve S_OK de SubmitMessage, la cola MAPI llama a IXPLogon::EndMessage para el mensaje como lo hace con el envío normal de mensajes. Si el proveedor de transporte devuelve un valor distinto de S_OK de SubmitMessage, la cola MAPI controla el valor correctamente antes de llamar a EndMessage o antes de llamar a SubmitMessage de nuevo.
6. Proveedor de transporte
Devuelve desde EndMessage con su estado de procesamiento de mensajes en el parámetro lpulFlags .
7. Cola MAPI y proveedor de transporte
El bucle SubmitMessage- EndMessage continúa hasta que se han descargado todos los mensajes de la cola.
8. Cola MAPI
Notifica al proveedor de transporte que ha terminado de descargar mensajes llamando al método IXPLogon::TransportNotify del proveedor de transporte con el NOTIFY_END_OUTBOUND_FLUSH marca establecido.
9. Proveedor de transporte
Libera los recursos externos que se usan en el envío de mensajes salientes para que otros proveedores de transporte puedan usarlos para vaciar sus colas. El bit STATUS_INBOUND_FLUSH de la propiedad PR_STATUS_CODE de la fila de estado del proveedor de transporte debe establecerse mediante ModifyStatusRow.
10. Cola MAPI
Comprueba el bit de STATUS_INBOUND_FLUSH de la fila de estado del proveedor de transporte y llama a IXPLogon::StartMessage si está establecido.
11. Proveedor de transporte
Procesa el mensaje y devuelve desde StartMessage. Si el proveedor de transporte tiene otros mensajes que cargar, debe llamar a SpoolerNotify con la marca NOTIFY_NEWMAIL establecida. Si el proveedor de transporte no tiene mensajes que cargar, debe llamar a IMAPIProp::SaveChanges en el mensaje que la cola MAPI pasó en StartMessage y devolver.
12. Cola MAPI
Continúa llamando a StartMessage hasta que se llama a SaveChanges en un mensaje. Una vez que el proveedor de transporte ha terminado de cargarse, el colador MAPI llama a TransportNotify con la marca NOTIFY_END_INBOUND_FLUSH establecida.
13. Proveedor de transporte
Borra el bit STATUS_INBOUND_FLUSH de la propiedad PR_STATUS_CODE de su fila de estado mediante ModifyStatusRow y libera todos los recursos externos para que estén disponibles para su uso por otros proveedores de transporte.
14. Cola MAPI
Llama a FlushQueues para el siguiente proveedor de transporte que aparece en el orden de transporte del perfil del usuario.

Si una aplicación cliente llama a IMAPIStatus::FlushQueues en el objeto de estado de un proveedor de transporte, el proveedor de transporte debe establecer el bit adecuado en su fila de estado con ModifyStatusRow. A continuación, la cola MAPI llama al método IXPLogon::FlushQueues del proveedor de transporte en la comodidad de la cola MAPI. Cuando se llama al método IXPLogon::FlushQueues del proveedor de transporte como resultado de la llamada IMAPIStatus::FlushQueues de una aplicación cliente, la operación se produce de forma asincrónica en la aplicación cliente. De lo contrario , IXPLogon::FlushQueues funciona sincrónicamente con la cola MAPI.

Por motivos de rendimiento, la cola MAPI solo llamará al método FlushQueues de un proveedor de transporte si las marcas STATUS_INBOUND_FLUSH y STATUS_OUTBOUND_FLUSH están establecidas en la fila de estado del proveedor de transporte. Por lo tanto, un proveedor de transporte puede detener la operación FlushQueues en cualquier momento borrando el STATUS_OUTBOUND_FLUSH y STATUS_INBOUND_FLUSH marcas en su fila de estado. Si la cola MAPI se está cerrando y necesita finalizar la operación FlushQueues , llama a TransportNotify con las marcas NOTIFY_END_INBOUND_FLUSH y NOTIFY_END_OUTBOUND_FLUSH establecidas. El proveedor de transporte debe liberar todos los recursos externos y devolverlos.