[HowTo] Enviar mail usando Gmail desde la consola de Linux

Esto tiene tantos usos distintos que me he detenido dos minutos a pensarlo y no sé por donde empezar pero hay una premisa básica:

En Linux tenés que tener un MTA configurado SI O SI. Cuando Linux necesite hacerte saber algo, ponerte al corriente de algún incidente, la mayoría de las veces intentará mandarte un mail. Si nunca te llegó uno de estos mails seguramente es por que te olvidaste de especificar a quien debería llegarle la información pertinente con lo que el dueño de la casilla user en el dominio example.com se entera por ejemplo, que tu fail2ban acaba de banear al tercer intento a un bot sudafricano probando root:god, o que tu microprocesador está trabajando 50 grados por encima de la temperatura de régimen.

Hoy hablando con un amigo, me preguntó:

“¿Y como hacés?”

…Yo le contaba que mis PC y servidores se comunican conmigo usando cuentas de Gmail y prometí escribir al respecto, para explicarle a él, para que me sirva de ayuda memoria en caso de Alzheimer (lo he hecho tantas veces que casi podría tipear todo el setup de memoria, pero uno nunca sabe…) y para toda la posteridad que quiera habitar esta tierra de nadie.

Así que acá esta: Como hacer de una cuenta de Gmail el MTA por defecto de tu Linux para poder enviar mail usando el comando mail (valga la redundancia):

Hay varias formas distintas de poner en marcha un MTA para tu Linux y dependiendo de la complejidad del escenario hasta podrías necesitar de algo como Postfix, Qmail, Sendmail o Exim pero para el caso que nos compete en donde solo necesitamos que nuestra PC nos pueda enviar mails automáticamente desde una cuenta predefinida, con msmtp basta y sobra.

sendmail

Msmtp es una pequeña utilidad que permite enviar correo electrónico usando cualquier MTA externo que tengas disponible, cosa que hoy en día se traduce en “usar tu cuenta de email”. Msmtp es básicamente un cliente SMTP que respeta los estándares de sendmail, es decir, puede conectar tu Linux con cualquier MTA gracias al comando “mail”.

Ponerlo a funcionar no podría ser mas simple (probado en Debian, Ubuntu, Fedora, Centos y Gentoo):

Dependiendo de tu distribución y tirando del gestor de paquetes, instalar:
  • openssl
  • msmtp
  • En fedora y centos vas a necesitar además de openssl-perl para poder hacer el hash del certificado para el cifrado de la conexión.
Una vez instalado todo, dedos a la obra:

 

1 – Instalar el certificado en openssl:

# mkdir ~/certificados

# cd ~/certificados

# wget https://github.com/bagder/curl/raw/master/lib/mk-ca-bundle.pl

# perl mk-ca-bundle.pl

Después de todo lo anterior, vas a tener en tu carpeta certificados un archivo “ca-bundle.crt” conteniendo varios certificados. Usaremos solo el “Equifax Secure CA” por lo que no tenés mas que editar ca-bundle y copiar y pegar Equifax en un archivo nuevo:

# nano ~/certificados/equifax.pem

Pegá dentro todo esto, que es el certificado actual que podés encontrar en ca-bundle.crt para Equifax Secure:

—–BEGIN CERTIFICATE—–
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
70+sB3c4
—–END CERTIFICATE—–

Por último, hacer que openssl lo digiera:

# c_rehash ~/certificados/equifax.pem

 

2 – Configurar msmtp para conectarse con Gmail:

La configuración de msmtp es bastante auto explicativa. El archivo de configuración por usuario es ~/.msmtprc y el global es /etc/msmtp.rc. Dependiendo de si querés una configuración distinta por usuario o una sola para todos, creá alguno de los dos archivos y pegá todo esto dentro. Reemplazá por tu nombre de usuario y contraseña:

account default
host smtp.gmail.com
port 587
from [email protected]
tls on
tls_starttls on
tls_trust_file ~/certificados/equifax.pem
auth on
user [email protected]
password aqui-tu-contraseña
logfile ~/.msmtp.log

Que nadie mas pueda leer este archivo:

# chmod 600 ~/.msmtprc

 

3 – Probar si funciona:

Si msmtp puede conectarse al servidor de Gmail y autenticarse correctamente, el siguiente comando debería mostrarte una lista de las capacidades disponibles en el mismo:

# msmtp –S

Que te devuelve como salida todo esto:

SMTP server at smtp.gmail.com (yx-in-f109.1e100.net [74.125.45.109]), port 587:
mx.google.com ESMTP m29sm11933437yhi.20
TLS certificate information:
Owner:
Common Name: smtp.gmail.com
Organization: Google Inc
Locality: Mountain View
State or Province: California
Country: US
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US
Validity:
Activation time: mié 16 feb 2011 01:38:09 ART
Expiration time: jue 16 feb 2012 01:48:09 ART
Fingerprints:
SHA1: DB:A0:2A:07:00:F9:E3:23:7D:07:E7:52:3C:95:9D:E6:7E:12:54:3F
MD5:  02:4C:12:F3:37:1F:0C:C1:EB:10:4B:92:F7:F1:E0:DF
Capabilities:
SIZE 35882577:
Maximum message size is 35882577 bytes = 34,22 MiB
STARTTLS:
Support for TLS encryption via the STARTTLS command
AUTH:
Supported authentication methods:
PLAIN LOGIN

De no ser así, volvé sobre tus pasos y revisá todo lo que hiciste hasta ahora, algo no ha quedado bien.

¿Funcionó? Sigamos entonces…

 

4 – Hacer de msmtp tu MTA por defecto:

Editá tu archivo /etc/mail.rc y agregale la siguiente línea:

set sendmail = “/usr/bin/msmtp”

 

5 – ¿Y ahora qué?

Ahora disfrutar. como msmtp toma datos de stadar input y los manda por mail puede servir para mil cosas distintas, por ejemplo:

Mandarte por mail a vos o a quien quieras todo el listado de archivos contenido en un directorio:

ls –lh /ruta/al/directorio | mail –s “Listado de /ruta/al/directorio en `hostname -f` el `date`” [email protected]

Enviar un archivo como adjunto (requiere mutt):

echo «adjunto el backup del día `date`» | mutt -a backup.tar.gz -s «backup de tal o cual cosa» -c [email protected]

Hacer que Linux te avise cuando se loguea tal o cual usuario –preferentemente root- mandando un mail editando el archivo bash_profile del usuario en cuestión:

nano ~/.bash_profile

Agregá ahí dentro una línea que diga:

echo “ALERTA DE LOGIN – Acceso en:” `hostname -f` `date` `who` | mail -s «Acceso desde `who | cut -d»(» -f2 | cut -d»)» -f1`» [email protected]

Podés enviarte por mail ciertos eventos en los logs filtrando con grep, o la salida de tal o cual script de cron en lugar de mandarlo a /dev/null como siempre, etc, etc, etc. Las posibilidades son infinitas.

¿Ves por que necesitbas un MTA?

De mas está decir que todo programa que disponga de la capacidad de avisarte de eventos por mail, que son la gran mayoría, de ahora en mas funcionará a la primera nada mas especificando el destinatario.

6 comentarios

  1. Hola, lo estoy intentando en Debian, pero no logro pasar del paso 3 -> # msmtp -S me devuelve -> msmtp: cannot set X509 trust file home/»usuario»/certificados/equifax.pem for TLS session: Base64 decoding error. Es error del certificado, del TLS, o yo que le erré al crear el archivo de configuración? Gracias. Saludos!!

  2. Segui todos los pasos que explicaste pero a mi me aparece este error:
    $ msmtp -S
    msmtp: cannot set X509 trust file /home/certificados/equifax.pem for TLS session: Error while reading file.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *