domingo, 23 de septiembre de 2012

Enviar correos html desde consola en Ubuntu con msmtp

Se pretende enviar correos mediante un comando de consola, como paso previo para realizar un envío masivo mediante un script, tomando las direcciones de un fichero de texto. Además, el contenido del correo no será texto plano, sino html.

Nos hemos decantado por el empleo de msmtp y mutt. Debemos tener muy clara la configuración de nuestro servidor de correo saliente.

Por ejemplo, supongamos que el servidor de correo saliente que vamos a utilizar tiene la siguiente configuración:

Nombre del servidor: servidor.salida.es
Puerto: 465
Seguridad de la conexión: SSL/TLS
Nombre de usuario: elquesea
Contraseña: patata
Dirección deseada de respuesta: elquesea@salida.es

Con estos datos, pasamos a la tarea:

PASO 1: Instalamos los paquetes:
sudo apt-get install msmtp mutt

PASO 2: Crear el archivo de configuración de msmtp:
$ vi ~/.msmtprc

En él escribiremos:

defaults
host servidor.salida.es
tls on
tls_certcheck off
port 465
auth login
from elquesea@salida.es
user elquesea
password patata

account default

¡Ojo! Este fichero contiene una contraseña sin cifrar, así que conviene que sólo lo pueda leer nuestro usuario. Para ello, cambiamos los permisos:

$ chmod 660 ~/.msmtprc

PASO 3: Configuramos mutt:
Ahora vamos a crear el fichero de configuración de mutt.

$ vi ~/.muttrc

En él escribimos:
set from = "elquesea@salida.es"
set realname = "Mi nombre"
set sendmail = /usr/bin/msmtp

set content_type = "text/html"

La última línea indica que el cuerpo de los correos se interpretará como html en lugar de texto plano, que es lo que hemos indicado arriba como objetivo. Esto no es necesario si nuestros correos no van a llevar formato html.

PASO 4: Enviamos un correo de prueba:
Ya está configurado. Ahora podemos enviarnos un correo de prueba, con el comando:
$ mutt -s "Prueba desde consola" direccion-receptor@dominio.com

Se entiende que en direccion-receptor@dominio.com pondremos la dirección de correo a la que vayamos a enviar el mensaje. Como se ve, mutt es interactivo, de forma que podremos escribir el mensaje en pantalla. También se le puede pasar el cuerpo del mensaje por tubería:

$ echo "Hola, esto es el cuerpo del mensaje." | mutt -s "Prueba desde consola" direccion-receptor@dominio.com

En este caso, el comando no sería interactivo, lo que nos conviene para utilizarlo en un script de envío masivo.

PASO 5: Fichero HTML
Decíamos al principio del post que nuestra intención era enviar un correo con HTML en lugar de texto plano. Tenemos que crear el fichero con el HTML aparte.
$ vi mail.html

En él escribiremos nuestro mensaje codificado en HTML.

Ahora, simplemente ejecutamos mutt y le pasamos el cuerpo del mensaje por fichero.
$ mutt -s "Prueba desde consola" direccion-receptor@dominio.com < mail.html