Enviar email con bash en RaspBerry Pi / Ubuntu

[Bash] [Terminal] [RaspBerryPi]

En mi trabajo se requiere automatizar tareas para mandar información diaria a clientes y proveedores, así que tuve que buscar una manera sencilla de lograrlo y lo más eficiente y rápido que se me ocurrió fue un script en bash. Además hace poco conseguí una Raspberry Pi y también agregué esta función para aprovecharla mejor.

Es importante aclarar que las contraseñas se van a almacenar en texto plano, por eso recomiendo utilizar Gmail así como generar una Contraseña de aplicación para este proceso y, si se van a automatizar tareas; para mejor control y protección de datos crear otra cuenta de usuario para darle sólo permisos de lectura a ese usuario.

Terminal

El primer paso que debemos hacer unicamente es necesario en Raspbian es instalar y configurar el smtp para que pueda comunicarse con gmail. Para ello debemos ejecutar siguiente comando:

sudo apt-get install msmtp-mta

En seguida vamos a crear un archivo .msmtprc en nuestra home con:

nano ~/.msmtprc

Y agregamos el siguiente contenido al archivo cambiando las partes que dicen “CuentaDeGmail” y “PasswordDeGmail” por la respectiva información:

account gmail
auth on
host smtp.gmail.com
from CuentaDeGmail
auth on
tls on
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt
user CuentaDeGmail
password PasswordDeGmail
port 587
account default : gmail

La contraseña puede ser la que genera Google desde la sección “Contraseñas de aplicación”. Lo siguiente sería cambiar los permisos de lectura sólo para el usuario ejecutando:

chmod 600 ~/.msmtprc

Lo siguiente es instalar (otra vez sólo en Raspbian) y configurar el comando mail que es con el que vamos a enviar los correos. Así que en nuestra Raspberry ejecutamos:

sudo apt-get install mailutils

Como lo había mencionado anteriormente todo lo de arriba es completamente innecesario en Ubuntu ya que vienen instalado y configurado por defecto, así que si lo haces en esa distro tienes que comenzar desde aquí, si lo estás haciendo con Raspbian simplemente continúa conmigo.

Lo siguiente es crear el archivo de configuración de mail para poder enviar los correos desde la terminal, es muy sencillo simplemente creamos el archivo .mailrc en nuestra home ejecutando:

nano ~/.mailrc

Y luego agregamos la siguiente configuración cambiando también ahí los respectivos campos de usuario y contraseña.

set smtp-use-starttls
set ssl-verify=strict
set smtp-auth=login
set smtp=smtp://smtp.gmail.com:587
set from="CuentaDeGmail"
set smtp-auth-user=CuentaDeGmail
set smtp-auth-password=PasswordDeGmail

Ahora guardamos el archivo y le cambiamos los permisos como al anterior.

Recordemos otra vez que ambos archivos de configuración contienen las contraseñas explicitas y cualquiera con mínimos permisos podría sacar de ahí la información, por eso hago incapie en que se use una Contraseña de Aplicación y no se utilice la misma cuenta de usuario para las tareas automáticas.

Con eso ya tendríamos “finalizada” la parte difícil, lo siguiente sería hacer una prueba con algo como:

mail -s "Asunto" cuentadecorreo@servidor.com

Al dar ‘enter’, (Nota: a usuarios de Raspbian les va a salir una linea con ‘Cc:’ es por si quien mandar una copia del correo a otra cuenta, si no es así simplemente presionen ‘enter’), nos quedaría el cursor parpadeando en la terminal ya que está esperando a que escribamos el contenido del correo. Ponemos todo el texto que queramos y luego pulsamos enter. Cuando el cursor esté en una linea en blanco ponemos un punto ‘.’ y volvemos a presionar enter con esto le decimos al programa que terminamos y puede mandar el correo. Un ejemplo de lo mencionado sería algo así:

engell@oakenshield:~$ mail -s "Asunto" dark.engell25@gmail.com
Cc:
Esto es el contenido de mi e-mail
Aquí sigo escribiendo.
.
engell@oakenshield:~$

Si queremos agregar más cuentas de destino simplemente basta con escribir otra cuenta de correo seguida de la anterior separadas por espacios de la siguiente manera:

mail -s "Asunto" cuenta1@servidor.com cuenta2@servidor.com cuenta3@servidor.com

Si necesitamos enviar el mismo correo a mucha más gente es más práctico hacer un archivo con las direcciones de correo como el siguiente:

cuenta1@servidor.com
cuenta2@servidor.com
cuenta3@servidor.com
cuenta4@servidor.com
cuenta5@servidor.com
cuenta6@servidor.com
cuenta7@servidor.com
cuenta8@servidor.com

Y luego ejecutar el comando así:

mail -s "Asunto" $(man ~/ListaDeCorreos.txt)

Con eso enviaríamos el mismo correo a los 8 destinatarios, si queremos evitar escribir el cuerpo del correo hacemos otro archivo con el contenido y el comando sería así:

mail -s "Asunto" $(man ~/ListaDeCorreos.txt) <~/ArchivoConTextoDelCorreo.txt

También se pueden adjuntar archivos y adentrarse más en el tema, pero como los paquetes que se instalan en Ubuntu como en Raspbian son diferentes tendría que detallar cuál funciona en cada distro, para asegurar que no tengan problemas mejor ejecuten mail –help y véanlo por ustedes mismos.

Recuerden que si mandan muchos correos su cuenta puede ser marcada como spam por los servidores, así que tengan cuidado para qué la usan. Sin más que agregar me despido y espero que les sirva. Nos leemos pronto.

Si te gusta lo que hago y quisieras apoyarme puedes suscribirte a mi Patreon o con un donativo vía PayPal lo que me facilita dedicar más tiempo a crear contenido con más frecuencia y que este sea de mayor calidad. No es obligatorio, pero si tienes la oportunidad te estaré profundamente agradecido.
 
comments powered by Disqus