Mutt

Índice

1. Introducción
1.1. mutt
1.2. MxA
2. Instalación
2.1. Combinaciones, editores de texto y mutt
2.2. MTA, MDA y MRA
3. Configuración
3.1. Mutt y ~/.muttrc. Introducción a la sintaxis
3.2. ~/.muttrc personalizado
3.3. ~/.offlineimaprc y ~/.msmtprc
3.4. Otros archivos de configuración

1. Introducción

1.1 mutt

Mutt es un cliente de correo en modo texto. Muy poderoso y con una década de vida a sus espaldas, aunque la instalación por defecto nos deja unas combinaciones de teclas algo complicadas.
Mutt soporta colores, organización de mensajes en hilos, varios protocolos (POP3, IMAP) y formatos de correo (mbox, MMDF, MH, maildir), MIME y PGP/GPG. Altamente configurable a través de un archivo rc, mediante combinaciones de teclas y macros.

http://av5.com/imgs/jns/journals/1/8/597/image001.gif

Mutt es un MUA (Mail User Agent). Con el fin de entender el funcionamiento de mutt, intentaremos explicar, en líneas generales, algunos conceptos relativos a los MxA (MUA, MRA, MDA)

Podemos dividir el proceso del correo electrónico en varias partes. Usualmente se habla de tres, pero es frecuente también encontrar descripciones que se basan en cuatro, cinco o seis partes. En primer lugar tenemos el cliente (MUA), el servidor que envía y apila los mensajes (MTA), el que recupera los mensajes (MRA), entrega (MDA) y el MSA, que toma los mensajes desde el MUA.
En ocasiones una sola aplicación combina varias de estas partes, como por ejemplo Icedove, y en otras cada aplicación comprende sólo una de las partes, como es el caso de mutt.

Todo esto puede parecernos muy confuso al principio, pero habrá ocasiones en las que resulte muy cómodo y conveniente dependiendo de la situación en la que nos encontremos. Por ejemplo, supongamos que tenemos una máquina que nos provee de sus propios hostname y registro de intercambio de correo, MX. En estas condiciones, estamos listos para enviar y recibir correo electrónico y sólo necesitaremos dos aplicaciones: mutt, que hará las veces de MUA, y sendmail, que actuará como MTA (combinando también funciones de MDA y MSA). Nótese que, si no es necesario, no se separarán las funciones.

1.2 MxA

A continuación veremos con más detalle algunos aspectos del modelo anteriormente descrito.

- MUA, Mail User Agent, la aplicación que el usuario final necesita para leer y almacenar sus correos, y para escribir y enviar nuevos mensajes mediante un MSA. En esta etapa pueden entrar en juego la decodificación (MIME) y encriptado de mensajes. MuttTools nos ofrece algunas ampliaciones muy interesantes a las funcionalidades de mutt.
Son dignas de mención algunas otras aplicaciones con funcionalidad de MUA: kmail, evolution, pine y elm
- MTA, Mail Transfer Agent (servidor SMTP), la parte que se encarga del encaminamiento y transferencia de correo entre máquinas, ISPs...etcétera.
Un MTA pone en cola, recibe, y envía correo electrónico a otros MTAs. Algunas actividades involucradas serán el encaminamiento de correo y reintentar enviarlo si por alguna razón el MTA destino no acepta la petición en ese momento, o el envío de alguna notificación al remitente si el MTA destino rechaza el mensaje. Algunas razones para estos envíos fallidos podrían ser que la dirección de destino no exista, que el buzón se encuentre lleno o sea inalcanzable, o simplemente se aplique alguna medida preventiva contra el spam.

Los MTAs se comunican entre ellos mediante el protocolo SMTP, Simple Mail Transfer Protocol. Entre las aplicaciones con funciones de MTA tenemos sendmail, exim y postfix

Por otra parte, existe otra clase de MTAs que actúan como clientes SMTP, y no como servidores SMTP. Se encargan de realizar tareas muy específicas, así que no es necesario que tengan a su alcance los recursos de los que disponen los MTA arriba explicados. Un ejemplo podría ser una aplicación que sólo necesite estar activa a la hora de enviar mensajes, sin preocuparse por los mensajes recibidos. En este caso, este MTA no modificaría ni encaminaría nada.
- MDA, Mail Delivery Agent. Supongamos que un correo ha llegado a su destino. El MTA lo transfiere al MDA, y éste lo procesa (realiza operaciones de "filtrado" tales como la clasificación en diferentes carpetas de entrada, el manejo de objetos como los archivos adjuntosl, respuestas automáticas, defensa contra el spam mediante listas estáticas de spammers conocidos o herramientas dinámicas como spamassasin y comprobación de la existencia de virus, aunque esto debería habrese hecho en el nivel del MTA) y lo lleva al buzón de correo entrante. En este punto podrían entrar en acción algunas herramientas como procmail o maildrop.
La mayoría de los MTA incluyen un MDA con funciones básicas, como por ejemplo sendmail.
- MSA. Tenemos el caso de un ISP con muchos usuarios, cada uno de los cuales utiliza su propio MUA en máquinas sin MTA. No es conveniente permitir a todos los usuarios el acceso a nuestro MTA sin ningún tipo de autentificación. Además, podríamos tener problemas con el spam. Así, esto pasa a ser una tarea algo más complicada, por lo que los MTA con este tipo de funcionalidades extra se denominan MSA
- MRA, Mail Retrieval Agent, se encarga de conectarse con el buzón de correo remoto y descargar el correo para su manipulación de forma local. Como ejemplos tenemos a fetchmail, getmail y retchmail

Podría darse el caso de que tuviésemos acceso físico a la máquina que almacena nuestro correo, o quizá podamos acceder a ella vía ssh. En estos casos no necesitaríamos ningún MRA . Sin embargo, no será el caso más común; generalmente nuestro correo electrónico estará almacenado en un servidor alojado en una máquina diferente a la que tengamos acceso físico, así que necesitaremos algo que nos haga llegar ese correo.
En ciertas ocasiones la solución es el uso de NFS, es decir, el sistema de ficheros del servidor remoto de correo se muestra en la máquina local como si realmente estuviese allí. Normalmente el usuario final no notará la diferencia, y no sería necesario configurar nada a nivel de MUA. Pero el caso más frecuente para el usuario, e incluso en algunos entornos organizativos, es el de tener que descargar y/o almacenar nuestro correo mediante IMAP o POP a través de algún MRA. Para un uso básico y no muy intensivo, la funcionalidad de MRA implementada en mutt debería ser suficiente. Sin embargo, mutt no procesará los mensajes a nivel de un MDA, esto sólo lo hacen los MRA "reales".
Para un uso frecuente, o cuando la funcionalidad de MDA en el servidor de correo esté limitada, se recomiendan los MRA "dedicados" que controlen las transferencias y que permitan el procesamiento a posteriori del correo.

mutt fue desarrollado siguiendo el principio de "una tarea por aplicación". Nuevas características pueden serle añadidas mediante su combinación con otras aplicaciones que siguen el mismo principio modular. Según la página web de mutt,
Putting too much into an application wastes unused resources --either in storage (HDD/RAM) or in run-time performance-- when in many cases people don't even use this extra functionality, or it is covered by some other specialist tool. (With a commercial program you'd even have to pay for the unused code, would you do that if you had the choice?)

A pesar de todo, en mutt se han incluído funcionalidades básicas propias de MRA, y para los desarrolladores de mutt tiene sentido hacerlo así, y no incluir funcionalidades de MTA dado que
el acceso y almacenamiento de mensajes en un sistema MUA+MRA queda dentro del control del usuario, mientras que con MTA ya aparecen conceptos que escaparían de dicho control.
En este nivel de abstracción, MUA+MRA cubren una sola área, así que tiene sentido reunir ambas funcionalidades en una sola aplicación, como es el caso de mutt.

mutt soporta también, de forma experimental y aún muy básica, el protocolo SMTP. Así, si tenemos problemas al utilizar una aplicación separada que nos proporcione un MTA, podríamos intentar con ésa opción. A la hora de instalar y configurar mutt tendremos que elegir lo que satisfaga mejor nuestras necesidades.

Lo explicado aquí no comprende todos los esquemas posibles. Existen infinidad de variaciones y casos particulares.

2. Instalación

2.1 Combinaciones, editores de texto y mutt

Podemos trabajar con mutt en multitud de composiciones con un número de aplicaciones igualmente numerosas. Por poner algunos ejemplos,

Image Hosted by ImageShack.us

Nuestro entorno de trabajo será una instalación de Debian sid/experimental. En primer lugar, dado que mutt se ejecuta en modo texto, necesitaremos instalar el editor con el que queremos que trabaje. Por ejemplo, podríamos pensar en nano o vim, así que si no los tuviésemos ya,

# aptitude install nano

o bien

# aptitude install vim

Mutt se encuentra en los repositorios , así que para instalarlo sólo necesitaremos hacer

# aptitude install mutt

Comprobamos ahora las opciones de configuración con las que ha sido compilado

# mutt -v

Si observásemos que no es lo que necesitamos, podríamos intentar la instalación de mutt desde las fuentes

La salida de mutt -v en nuestras condiciones de trabajo es

Mutt 1.5.18 (2008-05-17)
Copyright (C) 1996-2008 Michael R. Elkins and others.
Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.
Mutt is free software, and you are welcome to redistribute it
under certain conditions; type `mutt -vv' for details.

System: Linux 2.6.26-1-686 (i686)
ncurses: ncurses 5.6.20081004 (compiled with 5.6)
libidn: 1.10 (compiled with 1.9)
hcache backend: GDBM version 1.8.3. 10/15/2002 (built Aug 27 2008 09:23:18)
Opciones especificadas al compilar:
-DOMAIN
+DEBUG
-HOMESPOOL  +USE_SETGID  +USE_DOTLOCK  +DL_STANDALONE 
+USE_FCNTL  -USE_FLOCK  
+USE_POP  +USE_IMAP  +USE_SMTP  +USE_GSS  -USE_SSL_OPENSSL  +USE_SSL_GNUTLS  +USE_SASL  +HAVE_GETADDRINFO
+HAVE_REGCOMP  -USE_GNU_REGEX 
+HAVE_COLOR  +HAVE_START_COLOR  +HAVE_TYPEAHEAD  +HAVE_BKGDSET 
+HAVE_CURS_SET  +HAVE_META  +HAVE_RESIZETERM 
+CRYPT_BACKEND_CLASSIC_PGP  +CRYPT_BACKEND_CLASSIC_SMIME  -CRYPT_BACKEND_GPGME 
-EXACT_ADDRESS  -SUN_ATTACHMENT 
+ENABLE_NLS  -LOCALES_HACK  +COMPRESSED  +HAVE_WC_FUNCS  +HAVE_LANGINFO_CODESET  +HAVE_LANGINFO_YESEXPR 
+HAVE_ICONV  -ICONV_NONTRANS  +HAVE_LIBIDN  +HAVE_GETSID  +USE_HCACHE 
-ISPELL
SENDMAIL="/usr/sbin/sendmail"
MAILPATH="/var/mail"
PKGDATADIR="/usr/share/mutt"
SYSCONFDIR="/etc"
EXECSHELL="/bin/sh"
MIXMASTER="mixmaster"
To contact the developers, please mail to <mutt-dev@mutt.org>.
To report a bug, please visit http://bugs.mutt.org/.

patch-1.5.13.cd.ifdef.2
patch-1.5.13.cd.purge_message.3.4
patch-1.5.13.nt+ab.xtitles.4
patch-1.5.4.vk.pgp_verbose_mime
patch-1.5.6.dw.maildir-mtime.1
patch-1.5.8.hr.sensible_browser_position.3

Para una explicación detallada,

./configure --help

en las fuentes de mutt

Las opciones más importantes son USE_POP, USE_IMAP y USE_SSL, que nos darán el soporte respectivo, USE_FCNTL y USE_FLOCK, HOMESPOOL, HAVE_COLOR para el coloreado de los objetos y la sintaxis, y ncurses para las librerías que necesitamos que utilice mutt para mostrar su interfaz

Algunas características como el soporte SSL o el "Compressed-Folders" patch requieren la presencia de librerías adicionales, y las ncurses previamente instaladas podrían no satisfacer convenientemente las exigencias de mutt para mostrar todo su potencial. En estos inusuales casos podríamos tener que recompilar mutt, pero es tan sencillo como seguir las instrucciones incluídas en las fuentes.

Con cierta frecuencia necesitaremos tener activado USE_DOTLOCK (podemos ver que en Debian así se hace). DOTLOCK hace referencia al proceso en el que se ven involucrados mutt_dotlock y el acceso al buzón de entrada en spool, y cobra especial relevancia si el directorio spool no tiene permisos de escritura para todos los usuarios.

2.2 MTA, MDA y MRA

Llegado este punto, necesitaremos instalar las aplicaciones que utilizará mutt para realizar sus tareas. Ha llegado el momento de elegir, y podríamos decantarnos, por ejemplo, por la siguiente combinación;

# aptitude install offlineimap

Aunque, como se comentó anteriormente, mutt soporta por sí solo el protocolo IMAP, OfflineIMAP nos proporcionará herramientas para hacer más simple y completa la gestión del correo electrónico. Por ejemplo, podremos leer el correo desde varias máquinas, y los cambios que hagamos se verán reflejados en cada una de ellas, leer correo IMAP en clientes que no soportan este protocolo, o utilizar SSL incluso si el cliente que utilicemos no soporta SSL

# aptitude install msmtp

msmtp es un cliente SMTP muy simple y sencillo de configurar

Así las cosas, a partir de este punto explicaremos la instalación y configuración de mutt para su uso con IMAP (Internet Message Access Protocol)

3. Configuración

3.1 Mutt y ~/.muttrc. Introducción a la sintaxis

El fichero de configuración .muttrc es en el que se basa mutt. Si no lo encuentra en el home del usuario que lo está ejecutando utilizará /etc/Muttrc.
La instalación de mutt no crea ningún ~/.muttrc, así que tendremos que crearlo nosotros. Básicamente, tenemos dos puntos de partida. En primer lugar podríamos copiar /etc/Muttrc en nuestro home y renombrarlo,

$ cp /etc/Muttrc /home/usuario/.muttrc

Otra opción podría ser utilizar alguno de los ejemplos que se encuentran en /usr/share/doc/mutt/examples

# cd /usr/share/doc/mutt/examples
# gzip -d sample.muttrc.gz
# cp sample.muttrc /home/usuario/.muttrc

Vamos a investifgar un poco esta última opción, dado que el fichero es mucho más completo que el anterior.
.muttrc determinará los atajos de teclado en mutt, así como su apariencia y comportamiento

.muttrc es bastante autoexplicativo, pero intentaremos dar una visión general de la sintaxis y el significado de su contenido. Vamos a abrirlo para echarle un vistazo.

$ nano .muttrc

# $Id$

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# ME's personal .muttrc (Mutt 0.92.5)
#

# The format of this file is one command per line.  Everything after a pound
# sign (#) is a comment, unless a backward slash (\) precedes it.  Note: In
# folder-hook and send-hook you need to account for two levels of dequoting
# (see manual).
#

# Note: $folder should be set _before_ any other path vars where `+' or `='
# is used because paths are expanded when parsed
#
#set folder=~/Mail              # where i keep my mailboxes

#set abort_unmodified=yes       # automatically abort replies if I don't
                                # change the message
set alias_file=~/.mail_aliases  # where I keep my aliases
#set allow_8bit                 # never do Q-P encoding on legal 8-bit chars
set arrow_cursor                # use -> instead of hiliting the whole line
#set ascii_chars                # use ASCII instead of ACS chars for threads
#set askbcc
#set askcc
#set attribution="On %d, %n wrote:"     # how to attribute replies
set autoedit                    # go to the editor right away when composing
#set auto_tag                   # always operate on tagged messages
#set charset="iso-8859-1"       # character set for your terminal
set noconfirmappend             # don't ask me if i want to append to mailboxes
#set confirmcreate              # prompt when creating new files
set copy=yes                    # always save a copy of outgoing messages
set delete=yes                  # purge deleted messages without asking
set edit_headers                # let me edit the message header when composing
#set editor="emacs -nw"         # editor to use when composing messages
#set bounce=yes                 # don't ask about bouncing messages, just do it
#set fast_reply                 # skip initial prompts when replying
#set fcc_attach                 # keep attachments in copies of sent messages?
#set force_name                 # fcc by recipient, create if mailbox doesn't exist
#set forward_decode             # weed and MIME decode forwaded messages
#set forward_format="[%a: %s]"  # subject to use when forwarding messages
#set forward_quote              # quote the header and body of forward msgs
#set index_format="%4C %Z %{%m/%d} [%2N] %-15.15F (%4c) %s"
set index_format="%4C %Z %{%m/%d} %-15.15F (%4c) %s" # format of the index
#set hdrs                       # include `my_hdr' lines in outgoing messages
#set header                     # include message header when replying
set help                        # show the help lines
#set history=20                 # number of lines of history to remember
#set hostname="mutt.org"        # my DNS domain
set include                     # always include messages when replying
#set indent_string="> "         # how to quote replied text
#set locale="C"                 # locale to use for printing time
#set mailcap_path="~/.mailcap:/usr/local/share/mailcap"
set nomark_old                  # i don't care about whether a message is old
set mail_check=10               # how often to poll for new mail
set mbox=+mbox                  # where to store read messages
#set menu_scroll                # no implicit next-page/prev-page
#set metoo                      # remove my address when replying
set mime_forward                # use message/rfc822 type to forward messages
set move=yes                    # don't ask about moving messages, just do it
#set pager=less                 # some people prefer an external pager
#set pager_context=3            # no. of lines of context to give when scrolling
#set pager_format="-%S- %-20.20f %s"    # format of the pager status bar
set pager_index_lines=6         # how many index lines to show in the pager
#set pager_stop                 # don't move to the next message on next-page
#set pgp_strict_enc             # use Q-P encoding when needed for PGP
set postponed=+postponed        # mailbox to store postponed messages in
#set post_indent_string='---end quoted text---'
#set print=ask-yes              # ask me if I really want to print messages
set print_command=/bin/false    # how to print things (I like to save trees)
set noprompt_after      # ask me for a command after the external pager exits
#set quote_regexp="^ *[a-zA-Z]*[>:#}]"  # how to catch quoted text
set read_inc=25                 # show progress when reading a mailbox
#set recall                     # prompt to recall postponed messages
set record=+outbox              # default location to save outgoing mail
set reply_to                    # always use reply-to if present
#set reply_regexp="^(re:[ \t]*)+"# how to identify replies in the subject:
#set resolve            # move to the next message when an action is performed
#set reverse_alias              # attempt to look up my names for people
set reverse_name                # use my address as it appears in the message
                                # i am replying to
set nosave_empty                # remove files when no messages are left
#set save_name                  # save outgoing messages by recipient, if the
#set sendmail="/usr/lib/sendmail -oi -oem"      # how to deliver mail
#set shell="/bin/zsh"           # program to use for shell escapes
#set signature="~/.signature"   # file which contains my signature

# I subscribe to a lot of mailing lists, so this is _very_ useful.  This
# groups messages on the same subject to make it easier to follow a
# discussion.  Mutt will draw a nice tree showing how the discussion flows.
set sort=threads                # primary sorting method

#set sort_aux=reverse-date-received     # how to sort subthreads
#set sort_aux=last-date         # date of the last message in thread
set sort_browser=reverse-date   # how to sort files in the dir browser
set spoolfile='~/mailbox'       # where my new mail is located
#set status_format="-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? P$
#set status_on_top              # some people prefer the status bar on top
#set strict_threads             # don't thread by subject
set tilde                       # virtual lines to pad blank lines in the pager
#set timeout=0                  # timeout for prompt in the index menu
#set tmpdir=~/tmp               # where to store temp files
#set to_chars=" +TCF"
#set use_8bitmime               # enable the -B8BITMIME sendmail flag
set nouse_domain                # don't qualify local addresses with $domain
#set use_from                   # always generate the `From:' header field
set implicit_autoview=yes       # pager shows parts having a mailcap viewer
set pgp_verify_sig=no           # don't automatically verify message signatures
#set visual=vim                 # editor invoked by ~v in the builtin editor
#set nowait_key                 # prompt when a pipe returns normal status
set write_inc=25                # show progress while writing mailboxes

# only enable the following IFF you have sendmail 8.8.x or you will not
# be able to send mail!!!
#set dsn_notify='failure,delay' # when to return an error message
#set dsn_return=hdrs            # what to return in the error message

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Header fields I don't normally want to see
#
ignore *                # this means "ignore all lines by default"

# I do want to see these fields, though!
unignore        from: subject to cc mail-followup-to \
                date x-mailer x-url # this shows how nicely wrap long lines

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Color definitions
#

#color normal white default
color hdrdefault red default
color quoted brightblue default
color signature red default
color indicator brightyellow red
color error brightred default
color status yellow blue
color tree magenta default      # the thread tree in the index menu
color tilde magenta default
color message brightcyan default
color markers brightcyan default
color attachment brightmagenta default
color search default green      # how to hilite search patterns in the pager

color header brightred default ^(From|Subject):
color body magenta default "(ftp|http|https)://[^ ]+"   # point out URLs
color body magenta default [-a-z_0-9.]+@[-a-z_0-9.]+    # e-mail addresses
color underline brightgreen default

# attributes when using a mono terminal
#mono header underline ^(From|Subject):
mono quoted bold

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Key bindings
#
#       maps:
#               alias           alias menu
#               attach          attachment menu
#               browser         directory browser
#               compose         compose menu
#               index           message index
#               pgp             pgp menu
#               postpone        postponed message recall menu
#               generic         generic keymap for all of the above
#               editor          line editor
#               pager           text viewer
#

bind generic "\e<" first-entry  # emacs-like bindings for moving to top/bottom
bind generic \e> last-entry
bind generic { top-page
bind generic } bottom-page
bind generic \177 last-entry

macro index \cb "<pipe-message> urlview<Enter>" # simulate the old browse-url function

macro index S "<save-message>+spam<Enter>"
macro pager S "<save-message>+spam<Enter>"

#macro index \# "<search>bug<Enter>"    # search for bugs
#macro index "\""       "<enter-command> set realname=\"real hairy macro\" ?realname<Enter>" # and a com$
#macro index f1 "<enter-command>woohoo!"

bind pager G bottom     # just like vi and less
#macro   pager   \Ck     "<pipe-message> pgp -kaf<Enter>"   # a comment is valid here
#macro pager X "<pipe-message> morepgp<Enter>"  # pipe PGP message to a script

#bind editor \cy eol    # make ^Y jump to the end of the line

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# User Defined Headers
#

#my_hdr X-Useless-Header: Look ma, it's a \# sign! # real comment
#my_hdr X-Operating-System: `uname -a`

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Specify default filename when saving messages
#
#       save-hook [!]<pattern> <mailbox>
#
# <mailbox> is provided as default when saving messages from <pattern>

#save-hook mutt- =mutt-mail
#save-hook aol\\.com$ +spam
save-hook ^judge +diplomacy

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#              
# Multiple spool mailboxes
#              
#       mbox-hook [!]<pattern> <mbox-mailbox>
#              
# Read mail in <pattern> is moved to <mbox-mailbox> when <pattern> is
# closed.

#mbox-hook =mutt-users.in =mutt-users
#mbox-hook +TEST +inbox

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Change settings based upon message recipient
#
#       send-hook [!]<pattern> <command>
#
# <command> is executed when sending mail to an address matching <pattern>

#send-hook mutt- 'set signature=~/.sigmutt; my_hdr From: Mutt User <user@example.com>'

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Specify where to save composed messages
#
#       fcc-hook [!]<pattern> <mailbox>
#
# <pattern> is recipient(s), <mailbox> is where to save a copy

#fcc-hook joe +joe
#fcc-hook bob +bob

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Change settings based on mailbox
#
#       folder-hook [!]<pattern> <command>
#
# <command> is executed when opening a mailbox matching <pattern>

#folder-hook .          'set sort=date-sent'
#folder-hook mutt       'set index_format="%4C %Z %02m/%02N %-20.20F (%4l) %s"'
#folder-hook =mutt      my_hdr Revolution: \#9 # real comment

#folder-hook .          'set reply_regexp="^re:[ \t]*"'

# this mailing list prepends "[WM]" to all non reply subjects, so set
# $reply_regexp to ignore it
# Warning: May break threads for other people.
#folder-hook +wmaker    'set reply_regexp="^(re:[ \t]*)?\[WM\][ \t]*"'

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#              
# Aliases
#              
#       alias <name> <address> [ , <address> ... ]

#alias exam "\# to annoy michael" <user@host>
#alias me Michael Elkins <me@mutt.org> # me!
alias mutt-dev Mutt Development List <mutt-dev@mutt.org> # power users
alias mutt-users Mutt User List <mutt-users@mutt.org>
alias mutt-announce Mutt Announcement List <mutt-announce@mutt.org>
alias wmaker WindowMaker Mailing List <wmaker@eosys.com>

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Mailboxes to watch for new mail
#
#       mailboxes <path1> [ <path2> ... ]
#

mailboxes ! +mutt-dev +mutt-users +open-pgp +wmaker +hurricane +vim +ietf \
        +drums
#mailboxes `echo $HOME/Mail/*`

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Specify the order of the headers to appear when displaying a message
#
#       hdr_order <hdr1> [ <hdr2> ... ]
#

unhdr_order *                           # forget the previous settings
hdr_order date from subject to cc

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Identify mailing lists I subscribe to
#      
#       lists <list-name> [ <list-name> ... ]

lists ^mutt-dev@mutt\\.org$ ^mutt-users@mutt\\.org$

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Automatically use entries from ~/.mailcap to view these MIME types
#
#       auto_view <type> [ <type> ... ]

auto_view application/x-gunzip
auto_view application/x-gzip

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# Scoring      
#
#       score <pattern> <value>
#      
# 9999 and -9999 are special values which cause processing of hooks to stop
# at that entry.  If you prefix the score with an equal sign (=), the score
# is assigned to the message and processing stops.

#score '~f ^me@cs\.hmc\.edu$' 1000
#score '~t mutt | ~c mutt' =500
#score '~f aol\.com$' -9999

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# I use Mutt on several different machines, so I put local config commands
# in a separate file so I can have the rest of the settings the same on all
# machines.
#

source ~/.muttrc-local  # config commands local to this site

# EOF

Un resumen de algunas de las principales órdenes de configuración que podemos observar en cualquier .muttrc sería

Image Hosted by ImageShack.us

Un aspecto muy importante a la hora de utilizar mutt es conocer dónde se almacenará nuestro correo.

Image Hosted by ImageShack.us

Como podemos ver en la tabla adjunta, mutt busca por defecto el buzón de entrada de mensajes nuevos, inbox en /var/spool/mail/usuario. En el .muttrc que hemos conseguido esto se ha cambiado según las preferencias del autor del fichero,

set spoolfile='~/mailbox'

El resto de directorios pueden situarse en cualquier sitio, siempre que tengamos permiso de escritura. Se recomienda crear un directorio en /home (como por ejemplo ~/Mail) y albergarlos allí. Observamos también en la tabla resumen que mutt proporciona algunos atajos a la hora de hacer referencia a los directorios que contienen nustro correo. Por ejemplo, en .muttrc sería indiferente poner la primera línea que la segunda,

set record="$HOME/Mail/sent"; set mbox="$HOME/Mail/mbox"; set postponed="$HOME/Mail/postponed"
set folder="$HOME/Mail"; set record="+sent"; set mbox="+mbox"; set postponed="+postponed"

No se debe terminar el path de un directorio con /. Mutt lo inserta automáticamente al utilizar = o +. Además, es muy importante tener en cuenta que tanto + como = son sustituídos por su valor expandido en el momento en que son usados por set. No existe vínculo dinámico alguno entre ellos, así que si posteriormente cambiásemos $folder, la variable definida con set conservaría su antiguo valor. En pocas palabras, el orden en .muttrc es importante.

Mutt no se limita a la utilización de directorios alojados físicamente en nuestra máquina. Podríamos, además, hacer uso de IMAP y POP para acceder a directorios en máquinas remotas, aunque no es nada aconsejable que ubiquemos inbox o sent por ejemplo de esa manera, sobre todo si nuestra conexión con dicha máquina remota no es demasiado rápida. En estos casos de directorios remotos, la sintaxis sería de la forma

imap[s]://[user[:pw]@]imapserver[:port]/path
pop[s]://[user[:pw]@]popserver[:port]/  

Los campos user y password son opcionales.
imaps y pops son variantes de imap y pop, pero que soportan encriptación SSL

Para terminar con esta sección tocaremos brevemente el tema del formato de almacenaje del correo en mutt. Aquí encontramos, una vez más, que tenemos que tomar una decisión. A grandes rasgos, debemos elegir entre una mayor seguridad, estabilidad, funcionalidades o facilidad de uso. Mutt entiende cuatro formatos,

mbox, maldir, mh, mmdf

Es recomendable utilizar el mismo formato que en el MDA,, aunque no es obligatorio. Si nos resultara imposible cambiar el formato del MDA, pero al mismo tiempo necesitásemos utilizar algún otro con mutt, también podríamos hacerlo. Mutt autodetecta los formatos de los archivos mientras los comprueba. Cuando se crean nuevas carpetas, mutt aplica el formato especificado en $mbox_type

3.2 ~/.muttrc personalizado

Mutt es extremadamente flexible y poderoso, tal como lo indica la gran cantidad de posibilidades que nos ofrece ~/.muttrc. Para empezar, crearemos uno muy básico

$ nano .muttrc

set header_cache=~/.hcache
set charset="utf8"
set send_charset="utf-8"
set locale="spanish"
set allow_8bit
set realname='usuario'
set sendmail="/usr/bin/msmtp"
set edit_headers=yes
set folder=/home/usuario/Mail
set mbox=+gmail/mbox
set spoolfile=+gmail/inbox
set record=+gmail/enviados
set postponed=+gmail/borrador
set mbox_type=Maildir
set sort = 'threads'
set sort_aux = 'last-date-received'
hdr_order Date From To Cc

macro generic "<esc>1" ":set from=gmail(arroba)gmail.com"
macro generic "<esc>2" ":set from=gmail2(arroba)gmail.com"
macro generic "<esc>3" ":set from=esdebian(arroba)esdebian.org"

set envelope_from=yes

color normal white default
color hdrdefault yellow default
color attachment yellow default
color index green default "~Q"
color index brightyellow default "~N"
color index brightyellow default "~O"
color status brightyellow default
color search  yellow default
color message brightyellow default
color indicator brightyellow default
color tree brightyellow default

color header brightgreen default "From: "
color header brightgreen default "Subject: "
color header brightgreen default "date: "

color markers brightwhite default

3.3 ~/.offlineimaprc y ~/.msmtprc

Vamos a configurar ahora offlineimap según nuestras necesidades. Sólo necesitamos crear en nuestro directorio personal el archivo de configuración,

$ nano .offlineimaprc

En este caso, lo editaremos para la sincronización de dos cuentas gmail y una de esdebian (que al fin y al cabo es también gmail). Hemos de tener cuidado con los comentarios; deben situarse solos en una línea aparte del resto del código

[general]
# alias de las cuentas con las que trabajaremos:
accounts = gmail, gmail2, esdebian

# nos muestra qué ocurre al invocar a offlineimap:
ui = Curses.Blinkenlights

# si lo descomentamos no nos mostrará nada. Útil para procesos en segundo plano
# ui = Noninteractive.Quiet

[Account gmail]
# nombre del perfil para los <em>local Mails</em>
localrepository = localgmail

# nombre del perfil para los <em>remote Mails</em>
remoterepository = remotegmail

# comprobación del correo cada 5 minutos
# autorefresh = 5

[Repository localgmail]
# modo de almacenamiento local, explicado anteriormente. De momento sólo está soportado Maildir
type = Maildir

# Directorio donde se almacenará el correo en la sincronización
localfolders = /home/usuario/Mail/gmail

[Repository remotegmail]
# Tipo de <em>remote Mailbox</em> , Solo está soportado IMAP
type = IMAP
# En la primera línea ignoramos las carpetas listadas en la sincronización, y en la segunda le decimos a offlineimap que las # renombre como le indicamos
folderfilter = lambda foldername: not re.search ('(Todos|Spam|Destacados|Papelera|Borradores)', foldername)
nametrans = lambda foldername: re.sub('(INBOX)', 'inbox', re.sub('.*Enviados$', 'enviados', foldername))

# Dónde se realiza la conexión
remotehost = imap.gmail.com

# Uso de SSL
ssl = yes

# Si descomentamos esta línea, debemos especificar un puerto. Si la mantenemos asíi, simplemente se utilizará el puerto por
# omisión
remoteport = 993

# nombre que tenemos en la cuenta en cuestión
remoteuser = gmail(arroba)gmail.com

# contraseña (existen otras opciones más seguras que la de especificarlas aquí)
remotepass = contraseñagmail

[Account gmail2]
localrepository = localgmail2

remoterepository = remotegmail2

# autorefresh = 5

[Repository localgmail2]
type = Maildir

localfolders = /home/usuario/Mail/gmail2

[Repository remotegmail2]
type = IMAP
folderfilter = lambda foldername: not re.search ('(Todos|Spam|Destacados|Papelera|Borradores)', foldername)
nametrans = lambda foldername: re.sub('(INBOX)', 'inbox', re.sub('.*Enviados$', 'enviados', foldername))

remotehost = imap.gmail.com

ssl = yes

remoteport = 993

remoteuser = gmail2(arroba)gmail.com

remotepass = contraseñagmail2

[Account esdebian]
localrepository = localesdebian

remoterepository = remoteesdebian

# autorefresh = 5

[Repository localesdebian]
type = Maildir

localfolders = /home/usuario/Mail/esdebian

[Repository remoteesdebian]
type = IMAP

folderfilter = lambda foldername: not re.search ('(Todos|Spam|Destacados|Papelera|Borradores)', foldername)
nametrans = lambda foldername: re.sub('(INBOX)', 'inbox', re.sub('.*Enviados$', 'enviados', foldername))

remotehost = imap.gmail.com

ssl = yes

remoteport = 993

remoteuser = esdebian(arroba)esdebian.org

remotepass = contraseñaesdebian

[mbnames]

# aquí van unos ajustes necesarios para que, entre otras cosas, mutt entienda las carpetas que offlineimap crea

enabled = yes
filename = ~/Mail/muttrc.mailboxes
header = "mailboxes "
peritem = "+%(accountname)s/%(foldername)s"
sep = " "
footer = "\n"

Como hemos especificado la contraseña de nuestras cuentas, es imperativo ajustar los permisos,

# chmod 600 .offlineimaprc

Creamos ahora los directorios que necesitamos,

$ cd /home/usuario
$ mkdir Mail
$ mkdir Mail/gmail Mail/gmail2 Mail/esdebian

Ya estamos listos para sincronizar el correo. Invocamos a offlineimap,

$ offlineimap

Utilicemos IMAP o POP, vamos a necesitar un cliente smtp para enviar correo electrónico con mutt. El elegido es msmtp. Como en el caso anterior, creamos el fichero de configuración en nuestro directorio personal

$ nano .msmtprc

account gmail
host smtp.gmail.com
port 587
protocol smtp
auth on
from gmail(arroba)gmail.com
user gmail(arroba)gmail.com
password contraseñagmail
tls on
tls_starttls on
tls_trust_file /usr/share/ca-certificates/mozilla/Thawte_Premium_Server_CA.crt

# en la primera línea indicamos que las preferencias de gmail2 serán las mismas que las de gmail, así no tenemos que
# repetirlas
account gmail2 : gmail
from gmail2(arroba)gmail.com
user gmail2(arroba)gmail.com
password contraseñagmail2

account esdebian : gmail
from esdebian(arroba)esdebian.org
user esdebian(arroba)esdebian.org
password contraseñaesdebian

# cuenta por omisión
account default : gmail

# chmod 600 ~/.msmtprc

3.4 Otros archivos de configuración

(artículo en construcción)

Relacionado con Mutt