El manejo del correo electrónico es una de las tareas más comunes en que se hecha mano a recursos externos de nuestra aplicación. En Plex es posible recurrir a las clases OBMAPI, o a los patrones WINAPI desarrollados en su reemplazo. Sin embargo, sea porque OBMAPI nunca fue muy estable, o sea porque MSMAPI funcionó bien, es bastante común usar esta alternativa para el envío de correo. Este es un ejemplo de uso del activex de Microsoft para el envío de un mensaje con varios adjuntos, que en algún momento se completará con todos los casos posibles, y, quizá, con su equivalente en otros servidores de correo, ya que MSMapi espera a un servidor Exchange de Microsoft, pero sería distinto con un cliente Lotus Domino, por ejemplo.
Dado el hecho de hacer uso de un Activex, el caso sirve para tomar dos asuntos de interés: el uso de APIs, y el uso de Activex. Secundariamente, el uso de VBScript.
En primer lugar, asociar el activex. Esto requiere asociarlo a un panel. En este caso, eso no representa ninguna dificultad, ya que se trata de mostrar en una grilla los destinatarios del correo, marcarlos, y enviarles.
Fig 1-Crear el Activex
Seleccionando el Activex de la lista de controles registrados. (El activex debe ser copiado y registrado en la máquina de desarrollo). Para ello, copiar el control, y registrarlo ejecutando el comando Regsvr32.exe para registrar el ActiveX: regsvr32 msmapi.ocx
Fig 2-Buscando el Activex en la lista de controles registrados
Finalmente, declaramos a los controles como no visibles en la hoja de propiedades, ya que su manejo se hará mediante scripts disparados por los eventos asociados.
Figura 3-Declarar los controles como no visibles en la hoja de propiedades
El evento relacionado es un evento lógico asociado a un menú y un botón.
Figura 4-Declarar el evento lógico
En el diagrama de acción, en respuesta al evento Enviar correo, se ejecuta un loop tomando las filas que fueran marcadas, y enviando correo a cada una de ellas, con una lista de adjuntos. Abajo vemos la lógica del envío. En primer lugar, se abre una sesión de correo. En segundo lugar, se arman los nombres de los archivo adjuntos a transmitir, junto con los restantes datos del mensaje, y finalmente, se ejecuta el envío.
Figura 5-La lógica del evento
Preparación de los adjuntos.
Fig 6-Preparar adjuntos
Figura 7-Datos del mensaje, y API de envío
Figura 8-VBscript para abrir una sesión
Figura 9-Código de envío. Attachment count debe ser incrementado por cada adjunto
Figura 10-Los parámetros pasados al API
Todos los source code usados para el Activex deben ser declarados Script Engine VBScript.
Figura 11-Script Engine de los API de MSMapi
El paso final, cerrar la sesión al completar los envíos. Al tope del Event Handler, el primer evento controlado es si la bandera Instancias a transmitir está en Next. Si es así, se cierra la transmisión eliminando el handle.
Figura 12-Cerrar la sesion de correo
El VBScript del API de cierre de la transmisión.
Figura 13-API de signoff