Regularmente los administradores de sistemas requieren notificar, vía correo electrónico, a sus usuarios de ciertos cambios o nuevos servicios disponibles. La experiencia me ha indicado que el usuario aprecia más un correo personalizado que uno general. Sin embargo, lograr lo primero de manera manual es bastante tedioso e ineficaz. Por lo tanto, es lógico pensar en la posibilidad de automatizar el proceso de envío de correos electrónicos personalizados, en este artículo, explicaré una de las tantas maneras de lograrlo haciendo uso del lenguaje de programación Perl.
En CPAN podrá encontrar muchas alternativas, recuerde el
principio
TIMTOWTDI.
Sin embargo, la opción que más me atrajo fue MIME::Lite:TT
, básicamente este
módulo en Perl es un wrapper de MIME::Lite
que le permite el uso de
plantillas, vía Template::Toolkit
, para el cuerpo del mensaje del correo
electrónico. También puede encontrar MIME::Lite::TT::HTML
que le permitirá
enviar correos tanto en texto sin formato (MIME::Lite::TT
) como en formato
HTML. Sin embargo, estoy en contra de enviar correos en formato HTML, lo dejo a
su criterio.
Una de las ventajas de utilizar Template::Toolkit
para el cuerpo del mensaje
es separar en capas nuestra script, si se observa desde una versión muy
simplificada del patrón
MVC, el
control de la lógica de programación reside en el script en Perl, la plantilla
basada en Template Toolkit ofrecería la vista de los datos, de modo tal que
podríamos garantizar que la presentación está separada de los datos, los cuales
pueden encontrarse desde una base de datos o un simple fichero CSV. Otra ventaja
evidente es el posible reuso de componentes posteriormente.
Un primer ejemplo del uso de MIME::Lite:TT
puede ser el siguiente:
Y el cuerpo del correo electrónico, lo que en realidad es una plantilla basada
en Template::Toolkit
, vendría definido en el fichero example.txt.tt
de la
siguiente manera:
En el script en Perl mostrado previamente podemos percatarnos que los datos del destinario se encuentran inmersos en la lógica. Por lo tanto, el siguiente paso sería desacoplar esta parte de la siguiente manera:
Ahora los datos de los destinarios los extraemos de un fichero en formato CSV,
en este ejemplo, el fichero en formato CSV lo hemos denominado example.csv
.
Cabe aclarar que $msg->send()
realiza el envío por medio de Net::SMTP
y
podrá usar las opciones que se describen en dicho módulo. Sin embargo, si
necesita establecer una conexión SSL con el servidor SMTP es oportuno recurrir a
Net::SMTP::SSL
:
Note en este último ejemplo que la representación en cadena de caracteres del
cuerpo del correo electrónico viene dado por $msg->as_string
.
Para finalizar, es importante mencionar que también podrá adjuntar ficheros de
cualquier tipo a sus correos electrónicos, solo debe prestar especial atención
en el tipo MIME de los ficheros que adjunta, es decir, si enviará un fichero
adjunto PDF debe utilizar el tipo application/pdf
, si envía una imagen en el
formato GIF, debe usar el tipo image/gif
. El método a seguir para adjuntar uno
o más ficheros lo dejo para su investigación ;)