He publicado una nueva versión de mi script mailgun-mta.bash, que ahora soporta el uso de opciones y argumentos de línea de comandos como destinatario, asunto y remitente. Mi idea (tal como mencioné en artículos anteriores) es lograr reemplazar el comando mail por este script. De forma que todo el correo saliente desde un servidor sea a través del servicio en la nube de Mailgun.



La primera versión de este script funcionaba de manera similar al comando sendmail -t (tal como lo utiliza la configuración de Logwatch por defecto). Es decir, tomaba tanto el cuerpo del mensaje como los headers (incluyendo asunto, remitente y destinatario) desde entrada estándar. Ahora el script puede también acepar parámetros de línea de comandos, de manera de poder especificar asunto, remitente y destinatario por línea de comandos, y sólo el cuerpo del mensaje por entrada estándar. De esta forma el nuevo script es más compatible con diferentes aplicaciones y scripts.

Es posible acceder al código fuente de esta nueva versión directamente desde mi cuenta de Github, en mi repositorio scripts:

mailgun-mta.bash

Al ejecutar sin argumentos, el script muestra una breve ayuda:

root@linuxito:~/scripts# ./mailgun-mta.sh 
Usage: ./mailgun-mta.sh [-t] [-s SUBJECT] [-r FROM-ADDR] TO-ADDR
Options: 
  -t The message to be sent is expected to contain message headers (To:, From:, or Subject:).
  -s Message subject.
  -r From address.

Las opciones y argumentos son similares (copiadas) del agente mail (mailx) provisto por el paquete heirloom-mailx en sistemas basados en Debian.

Al utilizar la opción -t, parsea las opciones y argumentos pasados por línea de comandos, pero luego interpreta (y probablemente sobrescribe) los parámetros que encuentra en las cabeceras (headers) del mensaje desde entrada estándar, antes de recuperar el cuerpo del mensaje. Si no se pasa la opción -t es obligatorio especificar al menos el destinatario del mensaje.

Prueba de envío de correo desde línea de comando:

root@linuxito:~/scripts# echo "Probando el nuevo script :)" | ./mailgun-mta.sh -s "Prueba 17/10/2017" -r "root@linuxito.com" xxx@xxx.com

Prueba de envío de correo desde una aplicación (Logwatch):

root@linuxito:~/scripts# logwatch

Habiendo configurado la variable mailer para que apunte a mailgun-mta.bash en la configuración de Logwatch (/etc/logwatch/conf/logwatch.conf).

Funciona correctamente en ambos casos.

Ahora puedo enviar tanto correos de Logwatch como de cualquier otro script o aplicación. Iré agregando más opciones al agente a medida que las vaya necesitando. Por el momento son sólo estos tres o cuatro argumentos indispensables. Se aceptan colaboraciones y aportes via pull request en GitHub.

A partir de ahora iré actualizando el resto de mis scripts (por ejemplo ya lo he hecho en el script check_updates.bash a través de una variable MAILER) para que soporten el envío de correo a través de cualquier cliente, incluyendo a mailgun-mta.bash.


Tal vez pueda interesarte


Compartí este artículo