Martes, Noviembre 19, 2019

Script bash para enviar correo utilizando la API de Mailgun

correo-logo

Anteriormente presenté el servicio de correo en la nube Mailgun, que nos permite enviar y recibir correo desde una API a través de HTTPS sin necesidad de contar con un servidor ni cliente de correo electrónico. Una maravilla para administradores de sistemas y desarrolladores de software que necesitamos enviar correo de manera programática (notificaciones de aplicaciones Web, reset de contraseñas, alertas de sistemas de monitoreo, resúmenes diarios de actividad y logs, etc.)

En esta oportunidad voy a compartir un pequeño script Bash que he desarrollado para enviar los correos de Logwatch a través de Mailgun. Este script (que está aún muy verde y en fase pre-alpha) es una especie de MTA que emula el comportamiento del comando sendmail -t. Es decir, toma todo lo necesario para enviar el mensaje desde entrada estándar (destinatario, asunto y remitente desde los headers SMTP en lugar de como argumentos de línea de comandos).

El script asume que recibe el correo a enviar por entrada estándar, incluyendo los headers y el cuerpo del mensaje. Tal como se comporta el comando sendmail -t. Primero parsea los headers SMTP ("To:", "From:" y "Subject:", los cuales corresponden a destinatario, remitente y asunto), hasta encontrarse con la primera línea en blanco (CLRF) la cual marca el fin de los headers (delimita las cabeceras SMTP y cuerpo del mensaje). Por el momento ignora el resto de las cabeceras SMTP. A partir de allí toma los parámetros recuperados desde las cabeceras SMTP junto con el resto del correo (que corresponde con el cuerpo del mensaje) y utiliza la API de Mailgun para enviarlo.

El script se encuentra publicado en mi cuenta de Github, en el repositorio de scripts:

mailgun-mta.bash

Antes de utilizarlo es necesario configurar adecuadamente las variables APIKEY, URL y MAILFROM.

Por otro lado, tener en cuenta que, en el caso de cuentas de Mailgun gratuitas, es necesario autorizar el recipiente del mensaje (dirección de correo electrónico) antes de poder enviar correo alguno. Esto se hace desde la configuración de la cuenta ("Account Settings > Authorized Recipients").

La idea, en un futuro cercano, es que el script se comporte de esta manera sólo si se indica el parámetro -t como argumento de línea de comandos. De lo contrario tome los headers como argumentos y sólo el cuerpo del mensaje por entrada estándar (ver man mail).

Así como está, el script es capaz de enviar los correos de Logwatch de manera correcta. Sólo basta configurar la variable mailer de manera correcta en la configuración de Logwatch (/etc/logwatch/conf/logwatch.conf):

mailer = "/root/scripts/mailgun-mta.sh"

Referencias

 

Fuente: linuxito

¿Quién está en línea?

Hay 188 invitados y ningún miembro en línea

Contador de Visitas

10189009
Hoy Hoy 122
Ayer Ayer 2742
Esta semana Esta semana 2864
Este mes Este mes 53812
Total de Visitas Total de Visitas 10189009

Día con más
visitantes

11-04-2019 : 5783

Gracias por su visita