7.7 Un MUA: Mutt

Para no tener que ir leyendo “a pelo” los mail-boxes y usando el SMTP, un MUA como Mutt (http://www.mutt.org) nos va a venir de perlas.

7.7.1 Instalación

Debian:
 
root# apt-get install mutt

Fedora Core:
 
root# yum install mutt

Gentoo:
 
root# emerge mutt

Taller 7.3:
Instale Mutt.

7.7.2 Utilización

Mutt es un MUA que funciona en una consola de texto, pero no por ello deja de ser muy funcional. Veamos su utilización básica:

Enviar un correo:
La forma más simple de enviar un correo es:
# En este ejemplo nos enviamos un correo  
usuario$ mutt usuario@localhost

Mutt preguntará si deseamos modificar el destinatario. Pulsar <Enter> si no es así. Mutt preguntará por un subject. Pulsar <Enter> cuando lo hayamos especificado. Mutt usará el editor especificado en la variable de entorno EDITOR para crear el cuerpo del mensaje (o en su ausencia, un editor que corre en la consola que ya esté instalado, tal como joe, vi, nano, vim, etc.). Cambiar este comportamiento con:

usuario$ export EDITOR=/path/al/editor

Cuando hayamos salvado el cuerpo del mensaje (recuérdese que Mutt utiliza un editor de ficheros ASCII externo) y hayamos cerrado el editor, Mutt mostrará un menu para enviar el mensaje (pulsar <y>), abortar (<q>), cambiar el destinatario (<t>), añadir un CC (<c>), adjuntar un archivo (<a>), cambiar el subject (<d>) o ayuda (<?>). Normalmente pulsaremos <y>.

Una de las ventajas de Mutt es que puede crear el cuerpo del mensaje usando la redirección de la entrada estándar. Así, es muy sencillo enviar a alguien un fichero:

usuario$ mutt usuario@host < fichero.txt

Leer un correo:
Basta con llamar a Mutt:
usuario$ mutt

Mutt mostrará el Mail Box con los mensajes antiguos que no hayan sido borrados y los nuevos. Nos moveremos con el cursor hasta el correo que queremos leer y pulsamos <Enter>.

Una nota. Exim almacena el correo entrante en la cola correspondiente (/var/spool/mail/usuario) y de ahí lo lee Mutt. Cuando es leído por Mutt (no todavía por nosotros), Mutt tratará de almacenarlo en nuestro home, concretamente en el fichero mbox.§ Mutt pude procesar cualquier Mail Box a través de la opción -f. Ejemplo:

# Releyendo los mensajes de correo almacenados en nuestro Mail Box:  
usuario$ mutt -f $HOME/mbox

Taller 7.4:
Envíese un e-mail al host local. Envíese un fichero a través del e-mail al host local. Repita ambos procesos usando una dirección de correo en otro host donde tenga cuenta de correo (Hotmail, Gmail, etc.). Compruebe que las entregas han sido correctas.
Taller 7.5:
Para comprender cómo funciona el SMTP vamos a enviarnos un correo anónimo. Este correo se distingue porque cuando es recibido, entre la información que acompaña al cuerpo del mensaje (el correo en sí mismo) no figura la dirección de correo electrónico real de quien lo envía. Esto se puede hacer porque los mailers cuando aceptan enviar un correo no chequean que el remitente del correo existe.

Nos vamos a enviar un correo anónimo a nosotros mismos en dos casos: (1) utilizando el mailer que acabamos de instalar en nuestro host y (2) utilizando el mailer del dominio en el que estamos.

Usando el mailer local:
Para enviar el correo vamos usar el programa Telnet y nos conectaremos al puerto 25, donde escuchan los servidores de correo:
  1. Ejecutar:
    usuario$ telnet

    y pulsar <Return>. Aparecerá un mensaje de bienvenida, otro indicando cuál es la secuencia de escape que se utiliza para cerrar de forma inesperada una conexión (como la que vamos a establecer) y finalmente un prompt (una cadena indicando que el interprete de comandos de Telnet está esperando a que le introduzcamos un comando).

  2. Escribir:
    open localhost 25

    y esperar a recibir el mensaje de bienvenida por parte del servidor de correo. Dicho mensaje comenzará siempre por 220.

  3. Una vez que lo veamos, escribiremos textualmente (excepto donde pone nuestro_login_real que escribiremos nuestro login real en localhost):
    HELO anonimo  
    MAIL FROM: <anonimo@ya.com>  
    RCPT TO: <nuestro_login_real@localhost>  
    DATA  
    SUBJECT: Este es un correo con un remitente falso  
     
    Hola!  
    <anonimo@ya.com> no es un usuario real de ya.com.  
    .  
    QUIT

    Como puede verse existe una línea compuesta sólo por un punto. El mailer la usa para conocer dónde acaba el cuerpo del mensaje enviado.

  4. Compruebe que el correo le ha sido entregado utilizando el MUA que más le guste.
Usando el mailer del ISP:
 
  1. Nuestro primer paso consiste en averiguar el servidor de correo electrónico que es proporcionado por el ISP, es decir, el nombre de aquel host de Internet que se encargaría de enviar nuestros correos electrónicos cuando éstos son escritos en nuestro host. Para encontrar el mailer de la Universidad de Almería escribiremos:
    usuario$ nslookup -type=MX ual.es

    Entre otros mensajes que ahora no nos interesan aparecerá uno que dice mail exchanger igual a smtp.ual.es. Bien, este es el nombre del host que nos dejará conectarnos y enviar nuestro correo sin remitente real. Pudiera ocurrir que existen más de un mail exchanger. En este caso podremos utilizar cualquiera de ellos. El número entero que aparece junto a cada nombre indica la distancia en hops (esto puede comprobarse utilizando el programa traceroute si es que el host destino contesta). Cuanto menor es el número, mayor es la prioridad.

  2. A continuación conectarse a smtp.ual.es al puerto 25 usando Telnet:
    telnet smtp.ual.es 25

  3. Introducir (ojo, el destinatario cambia respecto del ejemplo anterior):
    HELO anonimo  
    MAIL FROM: <anonimo@ya.com>  
    RCPT TO: <nuestro_login_real@ual.es>  
    DATA  
    SUBJECT: Este es un correo con un remitente falso  
     
    Hola!  
    <anonimo@ya.com> no es un usuario real de ya.com.  
    .  
    QUIT

Cuestión 7.1:
¿Qué protocolo de transporte (TCP o UDP) utiliza el SMTP? ¿Coindice con el protocolo de transporte del programa Telnet? Explíquese.
Cuestión 7.2:
¿Cómo podemos conocer qué mailers ha atravesado un correo electrónico? Envíe un correo desde su host virtual usando mutt a una dirección suya externa (en Hotmail, por ejemplo). ¿Cuántos mailers están involucrados? ¿Cuánto tiempo ha estado viajando el correo? Si no es posible acceder a la cabecera de los correos electrónicos en su servidor de correo, haga un reenvío (forward) del correo desde dicho servidor hasta otro donde sí tenga acceso a dicha cabecera (almanzora.ual.es, por ejemplo, donde puede usar el programa mailx).
Cuestión 7.3:
Envíe un reply desde un servidor de correo externo hasta su cuenta en el host virtual. ¿A recibido el correo? Explique por qué ocurre esto.