Mutt es un cliente de correo para la consola, es muy fácil de usar y de configurar. Aunque el manejo del programa se hace principalmente desde su interfaz, aquí indico algunos comandos útiles para enviar un email directamente desde la línea de comandos, algo que puede resultar interesante cuando se usan en algun script.

Instalación y configuración de mutt.

Primero hay que instalar el programa y configurarlo. Si ya lo tenemos instalado, saltamos este paso.

# apt-get install mutt

Para usar mutt hay que configurarlo correctamente, indicándole una cuenta de correo desde la que se enviarán los emails, los datos del servidor, puerto, seguridad, etc, y si queremos usarlo desde la línea de comandos, también debemos incluir la contraseña para nuestra cuenta de correo. Editamos o creamos si no existe el fichero ~/.muttrc e introducimos los datos necesarios, por ejemplo, si tenemos una cuenta de gmail, puede ser algo así:

# Ajustes para el servidor de correo saliente SMTP
set from = "micorreo@gmail.com"
set realname = "Mi nombre"
set smtp_url = "smtp://micorreo@gmail.com@smtp.googlemail.com:587/"
set smtp_pass = "contraseña_para_micorreo"

# Ajustes para el correo entrante usando IMAP
set imap_user = "micorreo@gmail.com"
set folder = "imaps:/imap.googlemail.com:993"
set spoolfile = "+INBOX"
set imap_pass = "contraseña_para_micorreo"

# Si queremos añadir un archivo como plantilla de mensaje, donde incluyamos nuestra firma,
# creamos el fichero primero y lo asignamos aquí
set signature = "~/plantilla-firma.txt"

Con esta configuración, mutt tiene todos los datos necesarios para conectar con el servidor de correo, por lo que no pedirá la contraseña cuando enviemos o leamos el correo. Las contraseñas se guardan abiertas, al final se explica como encriptarlas usando GnuPG.

Algunos comandos útiles para enviar emails.

Mutt tiene una interfaz de usuario bastante intuitiva y fácil de usar, aunque no voy a explicar aquí como se usa, eso bien podría hacerse en un artículo nuevo. Para ejecutar el programa tan solo hay que escribir mutt en la consola, sin añadir ningún argumento ni opción.

Mutt admite varias opciones en la línea de comandos, lo que lo hace muy útil para usar

  • Para enviar un email simple.
$ echo "Este es el texto del mensaje" | mutt -s "Esto es el asunto" destinatario@correo.com
  • Para enviar uno o varios archivos adjuntos.
$ echo "Texto del mensaje" | mutt -s "Asunto del mensaje" destinatario@correo.com -a fichero1.txt imagen.jpg archivo.tar.gz
  • Para enviar un email con copia CC.
$ echo "Texto del mensaje" | mutt -s "Asunto" destinatario@correo.com -c otroemail@mail.com
  • Escribir el cuerpo del email con el comando echo es útil cuando es un texto corto, pero si es muy largo o queremos darle algo de formato, lo mejor es usar un editor de texto. Si ejecutamos directamente el comando mutt, este nos abrirá el editor que tengamos definido por defecto para la consola.
$ mutt -s "Asunto del mensaje" destinatario@correo.com -c otroemail@mail.com -a ficheroadjunto.zip

Después de escribir el texto en el editor, lo guardamos y salimos. Se abrirá de nuevo el interfaz de mutt. Para enviar el email tan solo hay que pulsar la tecla «y«.

Opcional. Encriptar las contraseñas usando GnuPG (GPG).

Como vemos en la configuración habitual de mutt, le estamos indicando nuestras contraseñas de correo de forma abierta y visible. Esto en principio no debería suponer ningún problema de seguridad si somos cuidadosos, ya que .muttrc es un fichero oculto que está solo en nuestra carpeta de usuario, nadie excepto nosotros tendría que tener acceso a el. No obstante una buena práctica es ocultar las contraseñas metiéndolas en un fichero encriptado con GPG y después indicarle a mutt que las busque en ese fichero. Para saber más sobre GnuPG y como usarlo, podemos leer este manual desde la web oficial. Los siguientes pasos son opcionales, sino queremos encriptar con GPG podemos omitirlos.

El primer paso es crear las claves GPG (pública y privada), si tenemos unas creadas de alguna ocasión anterior, podemos podemos utilizar esas y omitir este paso.

$ gpg --gen-key

A las preguntas respondemos indicando:
Tipo de clave: (1) RSA y ElGamal (sirve para firmar y cifrar)
Tamaño de clave: 2048 bits
Fecha de caducidad: 0 (no caduca)
Nombre y apellidos: Nombre Apellido
Dirección de correo electrónico: micorreo@gmail.com (utilizamos esta o cualquier otra)
Comentario: Se puede dejar en blanco

Después de validad todos los datos introducidos, pulsamos V. Nos pide una contraseña con la que proteger nuestras claves. GPG genera las claves a partir de bytes aleatorios obtenidos de acciones de teclado, movimientos de ratón, escrituras o lecturas de disco, etc. Por tanto hemos de hacer alguna actividad durante un tiempo hasta que se genere esta clave, este tiempo dependerá del tamaño de la clave (en este caso 2048 bits). Una buena idea es abrir otro terminal y ejecutar el comando «ls -R / «, así acabará antes.

Nota: En el tipo de clave hay que escoger uno que sirva tanto para cifrar como para firmar. Los hay que solo sirven para cifrar y otros solo para firmar. En este caso la opción (1) nos vale.

Una vez obtenidas nuestro par de claves pública/privada, ya se pueden utilizar para encriptar documentos. Ahora vamos a crear un fichero con los datos que queremos encriptar, en este caso solo serán las contraseñas smtp e imap. Creamos el fichero ~/.mutt/password.txt con este contenido:

set smtp_pass = "contraseña_para_micorreo"
set imap_pass = "contraseña_para_micorreo"

En este caso solo incluimos las contraseñas smtp e imap, pero podemos añadir cualquier otro dato del fichero ~/muttrc que queramos encriptar.

Ahora encriptamos este fichero password.txt usando nuestra clave pública.

$ gpg --encrypt -r micorreo@gmail.com -o password.gpg password.txt

Con la opción -r, indicamos el identificador de usuario de la clave que vamos a usar, ya que podemos tener varias. En este caso usamos la que hemos creado antes, asociada a micorreo@gmail.com.

Eso nos genera el fichero password.gpg con los datos de las contraseñas encriptados, por lo que ya podemos borrar el fichero fuente password.txt.

Lo siguiente es editar el fichero ~/.muttrc para eliminar las líneas de las contraseñas smtp e imap. Añadiendo ahora lo necesario para que mutt sepa donde encontrar estas contraseñas. La configuración de mutt con las contraseñas encriptadas podría ser algo así:

# Ajustes para el servidor de correo saliente SMTP
set from = "micorreo@gmail.com"
set realname = "Mi nombre"
set smtp_url = "smtp://micorreo@gmail.com@smtp.googlemail.com:587/"

# Ajustes para el correo entrante usando IMAP
set imap_user = "micorreo@gmail.com"
set folder = "imaps:/imap.googlemail.com:993"
set spoolfile = "+INBOX"

# Si queremos añadir un archivo como plantilla de mensaje, donde incluyamos nuestra firma,
# creamos el fichero primero y lo asignamos aquí
set signature = "~/plantilla-firma.txt"

# Contraseñas smtp e imap encriptadas
source "gpg -d ~/.mutt/password.gpg |"

Hay que tener en cuenta que al encriptar las contraseñas smtp e imap, lo que conseguimos es evitar que sean visibles, pero cada vez que enviemos o leamos el correo, GPG nos pedirá que introduzcamos la contraseña utilizada para proteger la clave pública. Para no tener que hacer eso, se puede utilizar gpg-agent.

Para correr gpg-agent como demonio y que obtenga nuestra contraseña GPG automáticamente cuando sea necesario, debemos agregar lo siguiente al final de nuestro archivo ~/.bashrc

envfile="$HOME/.gnupg/gpg-agent.env"
if [[ -e "$envfile" ]] && kill -0 $(grep GPG_AGENT_INFO "$envfile" | cut -d: -f 2) 2>/dev/null; then
  eval "$(cat "$envfile")"
else
  eval "$(gpg-agent --daemon --allow-preset-passphrase --write-env-file "$envfile")"
fi
export GPG_AGENT_INFO

Recargamos .bashrc con el siguiente comando:

$ source .bashrc

Configuramos GPG para que use gpg-agent. Editamos o creamos si no existe el fichero ~/.gnupg/gpg.conf y añadimos la línea:

use-agent

Reinciamos sesión y ya debería funcionar. La primera vez nos pedirá la contraseña que protege las claves, pero la guardará en cache y las proximas veces ya no la pedirá.