Mutt + GNUpg + Fetchmail + Procmail + mSMTP en OS X

Antes de nada, si, en OS X a ver si vamos aclarándonos que el SL no es solo linux.

Lo primero que necesitaremos será instalar todo este software que usaremos. Por defecto OS X ya trae incorporado fretchmail (lo utilizaremos para descargar el correo de nuestros distintos servidores pop/imap) y procmail (para ordenar el correo que llega en distintos mbox) por lo que nos ahorramos instalarlos. Para instalar msmtp, (pequeño programita para enviar correos, es decir, nuestro cliente smtp) mutt (MTA por excelencia) y gnupg (para encriptar y firmar nuestros correos) vamos a hacer uso de los macports. Así que nos dirigimos a la web de macports y bajamos el disco virtual (.dmg) correspondiente a la versión de nuestro OS X y lo instalamos a golpe de click como usuario administrador.
En nuestro caso vamos a configurarlo para una cuenta de GMail y otra cuenta de correo de alumno de la universida de Málaga. Una vez tenemos macports instalados desde una terminal instalamos msmtp, openssl, gnupg y mutt:

sudo port install mutt gnupg2 msmtp openssl

Teniendo ya instalado todo procedemos a connfigurar los programas uno a uno. Primero crearemos todos los ficheros necesarios, en /Users/usuario. También crearemos el directorio general para el correo y el fichero en /var/mail.

touch .msmtprc .fetchmailrc .muttrc .procmailrc
mkdir /Users/usuario/Mail
sudo touch /var/mail/usuario
chown usuario:mail /var/mail/usuario

- Archivo de configración del cliente SMTP .msmtprc

account uma
host correo.uma.es
from usuario@alu.uma.es
auth on
tls on
tls_certcheck off
user usuario@alu.uma.es
password contraseña
port 587

account gmail
tls on
host smtp.gmail.com
from usuario@gmail.com
auth on
tls on
tls_certcheck off
user usuario@gmail.com
password contraseña
port 587

Con esos parámetros de configuración seremos capaces de enviar correo desde los servidores de Gmail o de la UMA.

- Archivo de configuración de fetchmail .fetchmailrc

set logfile /var/log/fetchmail

poll buzon.uma.es with protocol pop3 user "usuario@alu.uma.es" there with password "contraseña" ssl sslcertck sslcertpath /opt/local/etc/openssl/certs
mda "/usr/bin/procmail -f %F -d %T";

poll pop.gmail.com with protocol pop3 uidl username "usuario@gmail.com" there with password "contraseña" is "usuario" here options ssl sslcertck sslcertpath /opt/local/etc/openssl/certs
mda "/usr/bin/procmail -f %F -d %T"

Por comodidad añadiremos una linea a nuestro crontab para que se baje el correo cada 10 minutos y las salidas molestas las mande a /dev/null.

crontab -e
*/5 * * * * /usr/bin/fetchmail -a -m '/usr/bin/procmail -d \%T' > /dev/null 2>&1

En este archivo de configuración ya hacemos usos de certificados ssl que previamente deberemos tener descargados y almacenados en la ruta que indica sslcertpath, para más información sobre como descargar estos certificados con s_client mirar este link.

- Archivo de configuración del MTA .muttrc

set sendmail = "/opt/local/bin/msmtp"
set folder = ~/Mail
set mbox = +mbox
set record = +sent-mails
set editor = "/usr/bin/vim"
set realname = "Yo YoMismo"
set envelope_from=yes
my_hdr From: usuario@alu.uma.es

color normal white black
color attachment brightyellow black
color hdrdefault cyan black
color indicator black cyan
color markers brightred black
color quoted green black
color signature cyan black
color status brightgreen blue
color tilde blue black
color tree red black

set send_charset="us-ascii:iso-8859-1:utf-8"
#set config_charset = utf-8
set signature = ~/.mutt/.firma
set locale = `echo "${LC_ALL:-${LC_TIME:-${LANG}}}"`

set pager_context=1
set pager_index_lines=6
set menu_scroll
set pgp_verify_sig=no
set status_on_top
set sort=threads

set status_format=" %r %b %f %n Del %d Msgs %m %l %> (%P)"
set pager_format="%-10.10i %[!%a %b %d %R]"
set date_format="!%H:%M %a %d %b "
set index_format="%4C %Z %[%b%d] %-15.15F %s"
set folder_format="%2C %t %8s %d %N %f"

set record="$HOME/Mail/enviados"
set delete=yes
set include=yes
set fast_reply=yes
set beep=no
set markers=no
set confirmappend=no
set to_chars=" +TCF"

mailboxes =duplicados
mailboxes =entrante
mailboxes =campushack
mailboxes =linux-malaga
mailboxes =proyecto-lima
mailboxes =archivo
mailboxes =keep

save-hook .* =keep
subscribe gentoo-user-es linux-malaga proyecto-lima

bind pager h display-toggle-weed

# Ejecuta fetchmail al presionar la tecla G
macro index G "!fetchmail -a -m 'procmail -d %T'\r"
macro pager G "!fetchmail -a -m 'procmail -d %T'\r"
macro generic "1" ":set from=usuario@alu.uma.es"
macro generic "2" ":set from=usuario@gmail.com"

ignore *
unignore Date To From: Subject X-Mailer Organization User-Agent
hdr_order Date From To Subject X-Mailer User-Agent Organization

alias qq qq

Una explicación rapida de este fichero. Al principio declaramos donde están los programas, los logs, las identidades y poca cosa más. Se configura el entorno de mutt con distintos colores y se setean las variables locales. Creamos las mboxs y unas macros para hacernos la vida más facil como son la de pulsar la letra "G" para descargar el correo y la de ESC1 o ESC2 para cambiar el from del correo. Por supuesto los datos de los mailboxes debeis modificarlos a vuestro uso.

- Archivo del organizador de correos .procmailrc

MAILDIR=$HOME/Mail
LOGABSTRACT=no
VERBOSE=off
FORMAIL=/usr/bin/formail
NL="
"
:0 Whc: .msgid.lock
| $FORMAIL -D 16384 .msgid.cache

:0 a
$MAILDIR/duplicates

#Filtrar de SPAM por asunto
:0
* ^Subject:.*(credit|cash|money|debt|sex|sale|loan)
/dev/null

#Filtro de SPAM por direcciones
:0
* ^From:.*@correodirect
/dev/null

:0
* ^From:.*@tdcanadatrust
/dev/null

:0
* ^From:.*@push.infojobs.net
/dev/null

#Mailboxes
:0
* ^List-Id:.*linux-malaga
linux-malaga

:0
* ^To:.*proyectolima@googlegroups.com
proyecto-lima

:0
* ^To:.*campus_seg@googlegroups.com
campushack

:0
* .*
entrante

Según las reglas anteriores organizamos el correo en distintos mbox o si procmail comprueba que está en nuestra lista de SPAM personal los manda a /dev/null y nos ahorra mirarlos.

Para la configuración de gnupg vamos primero a crearnos una clave y luego añadir otro trocito de configuración al ficharo .muttrc. Creamos nuestra clave gpg que para no hacer más pesado el artículo y repetir trabajo dejo un enlace a linuca con la información necesaria paso a paso. Y editamos .muttrc añadiendo las siguientes lineas.

set pgp_timeout=1800

set pgp_decode_command="/opt/local/bin/gpg %?p?--passphrase-fd 0? --no-verbose --no-default-keyring --keyring /Users/usuario/.gnupg/mutt-pubring.gpg --keyring /Users/usuario /.gnupg/pubring.gpg --quiet --batch --output - %f"
set pgp_verify_command="/opt/local/bin/gpg --no-verbose --no-default-keyring --keyring /Users/usuario/.gnupg/mutt-pubring.gpg --keyring /Users/usuario/.gnupg/pubring.gpg --q uiet --batch --output - --verify %s %f"
set pgp_decrypt_command="/opt/local/bin/gpg --passphrase-fd 0 --no-verbose --no-default-keyring --keyring /Users/usuario/.gnupg/mutt-pubring.gpg --keyring /Users/usuario/.gn upg/pubring.gpg --quiet --batch --output - %f"
set pgp_sign_command="/opt/local/bin/gpg --no-verbose --no-default-keyring --keyring /Users/usuario/.gnupg/mutt-pubring.gpg --keyring /Users/usuario/.gnupg/pubring.gpg --ba tch --quiet --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
set pgp_clearsign_command="/opt/local/bin/gpg --no-verbose --no-default-keyring --keyring /Users/usuario/.gnupg/mutt-pubring.gpg --keyring /Users/usuario/.gnupg/pubring.gpg --batch --quiet --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
set pgp_encrypt_only_command="pgpewrap /opt/local/bin/gpg --batch --quiet --no-verbose --no-default-keyring --keyring /Users/usuario/.gnupg/mutt-pubring.gpg --keyring /Us ers/usuario/.gnupg/pubring.gpg --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f"
set pgp_encrypt_sign_command="pgpewrap /opt/local/bin/gpg --passphrase-fd 0 --batch --quiet --no-verbose --no-default-keyring --keyring /Users/usuario/.gnupg/mutt-pubring.g pg --keyring /Users/usuario/.gnupg/pubring.gpg --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f"
set pgp_import_command="/opt/local/bin/gpg --no-verbose --no-default-keyring --keyring /Users/usuario/.gnupg/mutt-pubring.gpg --keyring /Users/usuario/.gnupg/pubring.gpg --im port -v %f"
set pgp_export_command="/opt/local/bin/gpg --no-verbose --no-default-keyring --keyring /Users/usuario/.gnupg/mutt-pubring.gpg --keyring /Users/usuario/.gnupg/pubring.gpg --e xport --armor %r"
set pgp_verify_key_command="/opt/local/bin/gpg --verbose --batch --fingerprint --check-sigs %r"
set pgp_list_pubring_command="/opt/local/bin/gpg --no-verbose --no-default-keyring --keyring /Users/usuario/.gnupg/mutt-pubring.gpg --keyring /Users/usuario/.gnupg/pubring.g pg --batch --quiet --with-colons --list-keys %r"
set pgp_list_secring_command="/opt/local/bin/gpg --no-verbose --no-default-keyring --keyring /Users/usuario/.gnupg/mutt-pubring.gpg --keyring /Users/usuario/.gnupg/pubring.g pg --batch --quiet --with-colons --list-secret-keys %r"

Para acceder al menu de encriptación, firma, etc... se hace con el atajo de la tecla 'p' justo antes de enviar el mensaje.

Y listo! nuestro mutt tendrá una apariencia y unos atajos similares a este.