Enviar un mensaje de correo con adjuntos

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.

Pasos a seguir

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 Crear el Activex en el panel

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 Seleccionando el activex de 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 Los controles creados, y definidos como no visibles

El evento relacionado es un evento lógico asociado a un menú y un botón.

Figura 4-Declarar el evento lógico

Evento relacionado

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 La lógica del diagrama de acción

Preparación de los adjuntos.

Fig 6-Preparar adjuntosPreparar los adjuntos

Figura 7-Datos del mensaje, y API de envíoEnvio

Figura 8-VBscript para abrir una sesión API Abrir sesión

Figura 9-Código de envío. Attachment count debe ser incrementado por cada adjunto API de envío

Figura 10-Los parámetros pasados al API parámetros del envio

Todos los source code usados para el Activex deben ser declarados Script Engine VBScript.

Figura 11-Script Engine de los API de MSMapi Script Engine

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

API cerrar sesión

El VBScript del API de cierre de la transmisión.

Figura 13-API de signoff Mappi signoff