El servicio de correo electr’onico

Vicente González Ruiz

December 26, 2013

Contents

1 En esta pr’actica aprenderemos a ...
2 The Internet mail infrastructure
 2.1 Servidores de e-mail, servidores SMTP, mail exchangers, mailers y MTAs ???
 2.2 Lectores de e-mails, escritores de e-mails y MUAs
 2.3 Acerca de los clientes y de los servidores
 2.4 Las direcciones de correo
 2.5 Los mensajes de correo
 2.6 Los sobres (envelopes)
 2.7 Bounce messages
 2.8 Registros DNS, distancias y responsabilidades de los mailers
3 El SMTP (Simple Mail Transfer Protocol)
 3.1 Peticiones y respuestas
 3.2 Los verbos
 3.3 C’odigos
4 Las cabeceras de los correos electr’onicos
 4.1 Formato
 4.2 Descripci’on de los principales campos
  4.2.1 Received:
  4.2.2 Date:
  4.2.3 To:
  4.2.4 Cc:
  4.2.5 Bcc:
  4.2.6 Subject:
  4.2.7 Reply-to:
  4.2.8 Message-ID:
  4.2.9 Resent-From:, Resent-To: y Resent-Subject:
  4.2.10 Return-Path:
5 Utilidad de un servidor local
6 El correo electr’onico en redes privadas
7 Envo de correo desde hosts con IP variable
8 Exim
 8.1 Instalaci’on
 8.2 Configuraci’on
9 Enviando correos con Telnet
10 Recibiendo correos con Fetchmail
11 Un MUA: Mutt
 11.1 Instalaci’on
 11.2 Utilizaci’on

1 En esta pr’actica aprenderemos a ...

  1. Instalar un servidor de correo electr’onico.
  2. Instalar un programa para leer y escribir correos electr’onicos.
  3. Utilizar el protocolo SMTP tal y como lo usan los servidores de correo.

2 The Internet mail infrastructure

2.1 Servidores de e-mail, servidores SMTP, mail exchangers, mailers y MTAs ???

Un servidor de e-mail, tambi’en llamado servidor SMTP, mail exchanger, mailer y MTA (Mail Transfer Agent) es un proceso servidor que recibe e-mails debidamente formateados utilizando el Simple Mail Transfer Protocol (SMTP) y los retransmite (si es preciso) a otros servidores de e-mail. Utilizaremos en adelante s’olo el t’ermino mailer para referirnos a un servidor SMTP.

2.2 Lectores de e-mails, escritores de e-mails y MUAs

Aunque es posible utilizar Telnet (hablando en SMTP con el mailer) para leer y escribir correos directamente, es mucho m’as c’omodo utilizar un programa que simplifique dicho proceso. Estos programas generalmente se llaman MUAs (Mail User Agents). Ejemplos m’as que conocidos son Microsoft Outlook (http://www.microsoft.com/spain/office/products/outlook/default.mspx), Mozilla Thunderbird (http://www.mozilla-europe.org/es/products/thunderbird/) y Novell Evolution (http://www.gnome.org/projects/evolution/).

Un MUA no tiene que ser necesariamente un programa que se instala en nuestra computadora. En los ’ultimos tiempos se han puesto de moda los MUAs v’ia Web (tambi’en llamados “Web Mail”) (como Hotmail (http://www.hotmail.com), Yahoo! Mail (http://mail.yahoo.com) y Gmail (http://gmail.google.com), que a trav’es de una p’aquina Web permiten enviar y recibir e-mails usando simplemente nuestro navegador Web favorito.

2.3 Acerca de los clientes y de los servidores

Los MUAs no son los ’unicos clientes del sistema de transmisi’on de e-mails propiamente dicho. De hecho, los mailers funcionan como clientes cuando los e-mails que reciben no van dirigidos a una cuenta de usuario del propio host donde se ejecuta el mailer porque se comunican con otro mailer para retransmitir el correo.1

2.4 Las direcciones de correo

Una direcci’on de correo es cualquier cadena que contiene, al menos, un s’imbolo @. Ejemplo:

vruiz@ual.es

En este ejemplo, la cadena ual.es se conoce como dominio de correo. A la cadena vruiz se le conoce como box part.

Otro aspecto importante a tener en cuenta es que las direcciones de correo son interpretadas de la misma forma en may’usculas y en min’usculas. Por tanto:

Vruiz@Ual.Es  
vruiz@ual.es  
VRUIZ@UAL.ES

son la misma direcci’on.

2.5 Los mensajes de correo

Un mensaje es una secuencia de l’ineas, donde una l’inea es una cadena de cero o m’as caracteres imprimibles ASCII de 7 bits (v’ease la tabla de la Secci’on ??) terminada en \015\012 (en DOS y Windows) o en \012 (en Unix). Los caracteres imprimibles ASCII de 7 bits son los que aparecen en la tabla ASCII entre las posiciones 33 y 127, ambas inclu’idas.

2.6 Los sobres (envelopes)

El remitente y el destinatario de un correo electr’onico deben estar identificados de forma ’unica mediante direcciones de correo. A un par de direcciones remitente/destinatario es a lo que se conoce como sobre. Tambi’en es posible que un sobre contenga varios destinatarios o ning’un remitente.

2.7 Bounce messages

Es responsabilidad de los mailers entregar correctamente los correos electr’onicos una vez que estos han sido aceptados. Sin embargo, cuando por alguna circunstancia esto no es posible (porque por ejemplo, el destinatario no existe o el mailer destino est’a apagado) algunos mailers env’ian correos de aviso al remitente indicando el problema. Estos mensajes se llaman bounce messages.

2.8 Registros DNS, distancias y responsabilidades de los mailers

Los mailers consultan al DNS cuando tienen que reenviar hacia otro mailer un correo electr’onico. Por ejemplo, con:

alumno$ /usr/bin/host -t MX ual.es  
ual.es mail is handled by 10 mail.rediris.es.  
ual.es mail is handled by 2 smtp.ual.es.

estamos preguntando al DNS qu’e mailers son los responsables para el dominio ual.es.2 Como podemos ver, existen dos hosts responsables del intercambio del correo electr’onico en la Universidad de Almer’ia; (mail.rediris.es y smpt.ual.es). El primero (mail.rediris.es) est’a a una distancia (en hops3 ) de 10 de la red que tiene como dominio ual.es, mientras que el segundo est’a a una distancia de 2. Esto significa que cualquier mailer (dentro o fuera de la Universidad) elegir’a primero a smtp.ual.es para entregar un correo electr’onico con este dominio. Cuando esta conexi’on no sea posible (porque smpt.ual.es ha ca’ido, por ejemplo) se utilizar’a mail.rediris.es. Si ninguno de estos hosts est’a disponible, el mailer generalmente env’ia un bounce message al remitente e intentar’a la conexi’on SMTP durante los pr’oximos d’ias (generalmente 6). Si finalmente el mensaje no es entregado se enviar’a otro bounce message al remitente indicando este evento y el mailer destruye el mensaje.

Ejercicio 1: Encuentre los mailers para el dominio ya.com, o cualquier otro dominio de correo que conozca.

3 El SMTP (Simple Mail Transfer Protocol)

El sistema de transferencia de correos electr’onicos utiliza el modelo cliente/servidor y un protocolo, el SMTP (RFC 821, RFC 1123, RFC 1425, RFC 1651, RFC 1869 y RFC 2821) para comunicarse.

3.1 Peticiones y respuestas

En una conversaci’on SMTP, un MUA o un mailer (cliente) env’ia un conjunto de peticiones (en ingl’es, requests) a un mailer (servidor) y ’este le contesta con respuestas (responses). A grandes rasgos el proceso petici’on-respuesta es as’i:

  1. Cuando un cliente se conecta a un servidor, ’este env’ia una respuesta que indica si acepta la conexi’on o la rechaza (temporal o permanentemente). Esta respuesta inicial se conoce como saludo (greeting).
  2. Si el servidor acepta la conexi’on, el cliente env’ia cero o m’as peticiones al servidor. En general el cliente no debe enviar una nueva petici’on al servidor si la anterior respuesta no ha sido recibida.

3.2 Los verbos

El formato de una petici’on es siempre una cadena ASCII imprimible:

  <verb> [<parameter>]\015\012

donde <verb> puede ser:

HELO:
Abreviatura de “hello”. Va seguido de un par’ametro que indica al servidor, el nombre del cliente. Ejemplo:
HELO gogh.ace.ual.es

RSET:
Abreviatura de “reset”. Se utiliza para borrar el sobre que se acaba de enviar al servidor. Esto generalmente se realiza cuando se van a enviar varios correos electr’onicos desde un mismo cliente a un mismo servidor durante una ’unica conexi’on SMTP (que en este caso se llama conexi’on SMTP persistente).
NOOP:
Abreviatura de “no operation”. Se utiliza para testear el estado de la conexi’on sin enviar informaci’on alguna.
MAIL:
Debe ir seguido de la cadena “FROM:” y de la direcci’on de correo del remitente.
RCPT:
Abreviatura de “recipient”. Debe ir seguido de la cadena “TO:” y de la direcci’on de correo del destinatario. Cuando hay varios destinatarios se env’ian varios “RCPT TO:”.
DATA:
No tiene argumentos y se utiliza para indicar al servidor que todas las l’ineas que van a continuaci’on forman el cuerpo del mensaje del correo electr’onico. Este cuerpo acaba en una l’inea que s’olo contiene un punto “.”.
QUIT:
Solicita al servidor el cierre de la conexi’on.

V’ease el RFC correspondiente para conocer el resto de verbos.

3.3 C’odigos

El formato de una respuesta es siempre una secuencia de cadenas ASCII imprimibles:

<code> <string>\015\012

donde <code> es un c’odigo de error que indica el car’acter de la respuesta. Por ejemplo, el c’odigo 250 indica que la petici’on ha sido aceptada. V’ease el RFC correspondiente para conocer el resto de c’odigos.

4 Las cabeceras de los correos electr’onicos

En esta secci’on vamos a analizar el formato de las cabeceras que se transmiten como parte de los correos electr’onicos. Dichas cabeceras son utilizadas por los mailers para personalizar el env’io de los e-mails. N’otese que en ning’un caso esta informaci’on debe ser confundida con la que se transfiere en una interacci’on SMTP. Toda esta informaci’on es creada bien por el remitente como parte del cuerpo del mensaje, bien por el mailer durante el procesamiento y la transmisi’on del e-mail.

4.1 Formato

Una cabecera de correo electr’onico es una secuencia de l’ineas no vac’ias que concatenan una lista de campos. A su vez, un campo es una secuencia de una o m’as l’ineas no vac’ias que contienen un nombre de campo y un valor. Un ejemplo:

Received: (qmail-queue invoked by uid 666);  
  30 Jul 1996 11:54:54 -0000  
From: "D. J. Bernstein" <djb@silverton.berkeley.edu>  
To: fred@silverton.berkeley.edu  
Date: 30 Jul 1996 11:54:54 -0000  
Message-ID: <19951223192543.3034.qmail@silverton.berkeley.edu>  
Reply-to: <djbernstein@gmail.com>  
Subject: Go, Bears!

Como podemos ver el primer campo de nombre Received: tiene un valor que ocupa dos l’ineas. Adem’as, la cabecera finaliza siempre en una l’inea vac’ia.

4.2 Descripci’on de los principales campos

La lista de campos que se muestra a continuaci’on no es exhaustiva. Para una lista mucho m’as completa, v’ease la documentaci’on asociada al mailer Qmail (http://cr.yp.to/immhf/index.html) y/o los RFC correspondientes.

4.2.1 Received:

Cada mailer inserta un campo Received: cuando procesa un mensaje entrante para indicar qui’en se lo env’ia y cu’ando. De esta manera podemos averiguar qu’e saltos ha dado (por qu’e mailers ha pasado) el e-mail hasta que ha llegado hasta nosotros.

4.2.2 Date:

Fecha en la que el primer MTA cre’o el e-mail. La diferencia de tiempos entre el que especifica el primer Received: y Date: es el tiempo que ha tardado el e-mail en transferirse desde el mailer origen hasta el destino.

4.2.3 To:

Especifica la lista de destinatarios. Cada destinatario es separado del siguiente mediante una “,” (una coma). Ejemplo:

To: The Boss <God@heaven.af.mil>,  
    <angels@heaven.af.mil>,  
    Wilt . (the  Stilt) Chamberlain@NBA.US

En este ejemplo hay tres destinatarios.

4.2.4 Cc:

Cc significa carbon copy (copia al carb’on) y se utiliza para especificar una lista de destinatarios de “segundo orden”. De esta manera, los que reciben el e-mail saben si el correo est’a directamente dirigidos a ellos o est’an recibiendo simplemente una copia.

4.2.5 Bcc:

Bcc significa bind carbon copy (copia al carb’on oculta) y se utiliza para especificar una lista de destinatarios del e-mail que no se van a identificar entre s’i. Para hacer esto, el MUA elimina el campo Bcc: antes de enviar el mensaje.

4.2.6 Subject:

Introduce una cadena explicatoria del contenido del e-mail. Este campo lo rellena el remitente del e-mail y suele ser la l’inea que sigue al verbo DATA en la transacci’on SMTP.

4.2.7 Reply-to:

Se utiliza para especificar una direcci’on de remitente distinta a la que se especific’o con el verbo MAIL en la interacci’on SMTP. Esto es ’util cuando el remitente tiene una cuenta en (acceso a) diferentes mailers y quiere recibir las respuestas (replies) siempre a la direcci’on de correo indicada por Reply-to:.

4.2.8 Message-ID:

Introduce una cadena que identifica al e-mail. Para intentar conseguir una etiqueta ’unica se utiliza generalmente un n’umero de serie seguido del dominio del mailer que est’a procesando el e-mail.

4.2.9 Resent-From:, Resent-To: y Resent-Subject:

Estos campos son creados cuando reenviamos un e-mail. Los campos From:, To: y Subject: son copiados a Resent-From:, Resent-To: y Resent-Subject:, respectivamente. De esta manera quedan libres para obtener otros valores cuando se reenv’ia el e-mail.

4.2.10 Return-Path:

Indica la lista de mailers a los que puede enviarse un bounce message cuando aparece alg’un problema con la entrega del e-mail.

5 Utilidad de un servidor local

En esta pr’actica vamos a aprender a instalar un servidor de correo electr’onico. Algunas de las ventajas de que nuestro mail exchanger resida en el host local son:

  1. No es necesario estar permanentemente conectado a Internet para enviar e-mails a usuarios remotos. El sistema de correo se encarga de encolar los mensajes salientes y de chequear peri’odicamente si la conexi’on se ha restablecido.
  2. Aunque no tengamos nunca conexi’on a Internet, los distintos usuarios de nuestro host (recu’erdese que Linux es un sistema operativo multiusuario) podr’an escribirse entre s’i.

6 El correo electr’onico en redes privadas

Como cualquier otro servicio que se ofrece dentro de una red privada tenemos que tener en cuenta que, a menos que configuremos nuestro NAT redireccionando los puertos correspondientes, no tendremos correo entrante desde Internet a la red privada. Por tanto, ya que el servicio de correo electr’onico escucha de forma est’andar en el puerto 25, simplemente deber’iamos redireccionar este puerto desde el NAT hacia el host y el puerto (probablemente, tambi’en el 25) donde el mailer est’a escuchando.

7 Envo de correo desde hosts con IP variable

Hoy en da se ha puesto de moda el Web mail para millones de usuarios, porque es una opcin sencilla y cmoda cuando acceden al correo desde un host conectado a una red privada o simplemente desde un host que est detras de un NAT y ste recibe una IP pblica variable. Sin embargo, es interesante conocer que sta no es la nica forma de usar el correo electrnico. Incluso cuando slo un usuario es el que enva y recibe correo desde un nico host.

En este sentido, la forma tradicional para el mailing donde todo el correo saliente se almacena primero en un servidor local tiene numerosas ventajas sobre Web mail. En primer lugar, y quizs la ms importante de todas ellas, es que podemos dar la orden de enviar correos desde un host que no est conectado a Internet. Luego, ms tarde, cuando recuperemos la conectividad, podemos enviar todos los correos salientes de una sola vez. En realidad siempre que la red est congestionada va a ser mucho ms eficiente enviar correo mediante un servidor de correo real que escribirlo, editarlo y enviarlo va Web mail.

8 Exim

Exim (http://www.exim.org) es un potente mailer que (a diferencia de otros como Qmail (http://cr.yp.to/qmail.html), puede ser distribuido mediante c’odigo compilado. A continuacin aprenderemos a instalarlo y configurarlo.

8.1 Instalaci’on

Debian’s:
 
root# apt-get install exim4

Red Hat’s:
 
root# yum install exim

Gentoo’s:
 
root# emerge exim

8.2 Configuraci’on

Para configurar un servidor de correo debemos tener en cuenta varios aspectos:

  1. Si vamos a aceptar correo entrante para usuarios del host que ejecuta el mailer. Normalmente la respuesta ser’a afirmativa ya que es probable que un usuario le escriba a otro usuario dentro del propio host. Ntese sin embargo que esto no significa que vayamos a recibir correo externo (primero ste tiene que llegarnos :-).
  2. Si estamos en una red privada y si nuestro router-NAT tiene asignada una dirección IP din’amica. Si as’i es, deber’iamos configurar el mailer para que ’el no entrege directamente el correo saliente porque es probable que nos consideren como un spammer (y los servidores de correo a los que exim intente conectarse, lo ignorarn). En este caso no queda m’as remedio que usar otro mailer (probablemente el del ISP). As por ejemplo, si estamos instalando exim en un host de la Universidad de Almer’ia deberamos usar el host smtp.ual.es para que ste haga la entrega por nosotros. A este mailer exim lo llama smarthost. Evidentemente deberemos conocer su dirección IP o su nombre4 .
  3. El dominio que vamos a usar para conocer si el correo entrante va dirigido a un usuario local. Este dominio deber’ia coincidir con el que figura en el fichero /etc/resolv.conf. Es importante utilizar un dominio real si vamos a mandar correos al exterior porque muchos servidores SMTP comprueban que el dominio del remitente exista.5
  4. Los mailers que tienen permiso para entregarnos correo entrante. En principio, todos.6
  5. Otros dominios que los destinatarios quieren usar para recibir el correo. Por supuesto el DNS tiene que estar al tanto de esto.
  6. Si vamos a aceptar correo entrante para usuarios que no tienen cuenta en el host que ejecuta el mailer. En otras palabras, si el mailer que estamos instalando va a ser un smarthost.
  7. El formato de los Mail Boxes. Normalmente usaremos el formato “mbox”, que es el est’andar. En este formato todos los correos aparecen concatenados en un ’unico fichero ASCII.

Debian’s:
 
root# dpkg-reconfigure exim4-config  
# El instalador solicitar’a toda la informaci’on denecesaria con una  
# serie de preguntas. Esta informaci’on se escribe en el fichero  
# "/etc/exim4/update-exim4.conf.conf".

Red Hat’s:
Es necesario configurar el servidor modificando los ficheros correspondientes. Acceder a la Web de Exim (http://www.exim.org) para m’as informaci’on.
Gentoo’s:
Como en la mayor’ia de las configuraciones en Gentoo, hay que modificar los ficheros de configuraci’on correspondientes. En http://gentoo-wiki.com/Mail_Server_based_on_Exim_and_Courier-imap encontrar’a una buena documentaci’on.

A continuacin se explica cmo configurar exim para que sus correos se transmitan a travs de GMail. Esta opcin es muy interesante porque nos va a permitir enviar correos incluso cuando no estamos conectados a Internet. De esta forma, cuando exim detecte que ya existe conexin, enviar todos los correos encolados.

  1. Elija “El correo se enva mediante un smarthost; se recibe a travs de SMTP”.
  2. Especifique “escriba-aqu-el-nombre-de-su-host.ual.es” como nombre del dominio por defecto. Si no conoce su dominio, puede dejarlo en blanco.
  3. Especifique slo “127.0.0.1 ; ::1” como direccin IP (IPv4 e IPV6) a la que exim escuchar peticiones SMTP. De esta forma, slo los usuarios de su propia mquina podrn usar este demonio que est configurando para poder enviar correo.
  4. Especifique slo
    escriba-aqu-el-nombre-de-su-host-sin-dominio ;\  
    localhost

    en la lista de dominios para los que su host es el destino final de esos correos con dicho dominio. De esta manera, los correos con destino a su propio host no sern enviados a travs de GMail.

  5. Deje en blanco la lista de rangos de direcciones IP para los que su host va a hacer relay, es decir, se comportara para ellos como GMail se va a comportar para su host. En otras palabras, no estamos configurando un smarthost.
  6. Especifique “smtp.gmail.com::587” cuando se le pregunte por el nombre (o direccin IP) del equipo servidor de correo saliente (smarthost).
  7. Cuando se le pregunte si desea ocultar el nombre de su host en el correo saliente, indique que “No” (a no ser que desee dar la impresin de que sus correos se han generado en un host diferente).
  8. Limite, indicando “S” el nmero de consultas al DNS (marcacin bajo demanda). De esta manera exim no intentar resolver los nombres de dominio cada vez que recibe un correo (adems, esto sera imposible si no estamos conectados a Internet). Ntese que sta no es la opcin por defecto.
  9. Elija la opcin de almacenar el correo entrante en “/var/mail”. De esta manera, cualquier correo que se genere en su propio host y que vaya destinado a usted, ser almacenado en el fichero “/var/mail/su-nombre-de-usuario”.
  10. Seleccione separar la configuracin de exim en ficheros pequeos. Ntese que sta no es la opcin por defecto.
  11. Finalmente, especifique su nombre de usuario cuando se le pregunte hacia dnde debera redirigirse los correos que tienen como destino “postmaster” y “root”, ... y cualquier otro mensaje generado en su host con carcter administrativo. Esta es una excelente poltica a usar cuando desea implicase en el mantenimiento de su sistema.
  12. Ejecute:
    root# editor /etc/exim4/passwd.client

    y aada la siguiente lnea:

    *.google.com:su-nombre-de-cuenta-en-gmail@gmail.com:\  
    su-password-en-gmail

    Salve el fichero.

  13. Ejecute:
    root# chown root:Debian-exim /etc/exim4/passwd.client

  14. Ejecute:
    root# update-exim4.conf

  15. Ejecute (este paso slo lo debera realizar si no est contento con el periodo que usa exim para reenviar el correo saliente encolado):
    root# editor /etc/exim4/conf.d/retry/30_exim4-config

    y cambie la lnea:

    * * F,2h,15m; G,16h,1h,1.5; F,4d,6h

    por:

    #* * F,2h,15m; G,16h,1h,1.5; F,4d,6h  
    * * F,7d,1m

    y ahora ejecute:

    root# editor /etc/default/exim4

    y cambie la lnea:

    QUEUEINTERVAL=’30m’

    por:

    #QUEUEINTERVAL=’30m’  
    QUEUEINTERVAL=’1m’

    Con estas dos modificaciones habr conseguido que exim reintente enviar el correo saliente cada minuto. Puede comprobar el resultado de este cambio chequeando el maillog del exim, ejecutando:

    $ tail -f /var/log/exim4/mainlog

9 Enviando correos con Telnet

Para comprender mejor c’omo funciona el SMTP vamos a enviar un correo tal y como lo hara un MTA que se conecta a un servidor SMTP.

  1. Ejecutar:
    alumno$ telnet

    y pulsar <Return>. Aparecer’a un mensaje de bienvenida, otro indicando cu’al es la secuencia de escape que se utiliza para cerrar de forma inesperada una conexi’on (como la que vamos a establecer) y finalmente un prompt (una cadena indicando que el interprete de comandos de Telnet est’a 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.7 Dicho mensaje comenzar’a siempre por 220.

  3. Una vez que lo veamos, textualmente escribiremos (ntese que el host local puede coincidir con el host remoto, en cuyo caso estaremos escribindonos un mensaje a nosotros mismos en la mquina local. De esta forma comprobaremos que exim est funcionando, aunque no sabremos si ha sido correctamente configurado para enviar correo saliente a travs de Gmail, por ejemplo):
    HELO nuestro-nombre-de-usuario-en-localhost  
    MAIL FROM: nuestro-nombre-de-usuario-en-localhost\  
    @localhost  
    RCPT TO: nuestro-nombre-de-usuario-en-host-remoto\  
    @dominio-remoto  
    DATA  
    SUBJECT: Este es un correo de prueba!  
     
    Hola!  
    El correo mola mazo!  
    .  
    QUIT

    Como puede verse existe una l’inea compuesta s’olo por un punto. El mailer la usa para conocer d’onde acaba el cuerpo del mensaje enviado.

  4. Compruebe que el correo le ha sido entregado. Si el correo se lo ha enviado a una cuenta externa, utilize el MUA correspondiente. Si el correo ha sido enviado a localhost, espere a leer la siguiente seccin.

10 Recibiendo correos con Fetchmail

Aunque lo ideal sera usar el servidor de correo que hemos instalado anteriormente para atender al correo entrante, frecuentemente esto imposible porque nuestro host generalmente posee una direccin IP dinmica, est detrs de un NAT o un cortafuegos al que no tiene acceso, y adems, suele ocurrir que su host est apagado (es un porttil que slo lo enciende cuando trabaja con l). Por estos motivos, la tcnica ms adecuada es usar un cliente de correo, no un servidor, incluso para recibir el correo.

Fetchmail es una aplicacin que puede usarse bajo demanda o en “modo demonio” para reclamar correo de un servidor POP o IMAP. En ambas situaciones, Fetchmail se ejecuta en modo usuario.

Para configurar el acceso de Fetchmail a GMail, debe crearse el fichero $HOME/.fetchmailrc con el siguiente contenido:

poll pop.gmail.com       # Servidor POP de GMail  
with proto POP3          # Protocolo  
user ’su-nombre-de-usuario-en-Gmail’ # Sin "@gmail.com"  
there with password ’su-password-en-Gmail’  
is ’su-nombre-de-usuario-en-su-host’ here  
options  
keep                     # Dejaremos el correo en GMail  
ssl                      # Las transmisiones estn cifradas

A continuacin ajustamos al mnimo los permisos de acceso al fichero anterior porque como vemos en l estn escritos nuestro nombre de usuario y password en GMail, y esto puede ser delicado.

chmod 600 ~/.fetchmailrc

Para descargar el correo desde GMail slo hay que invocar a Fetchmail escribiendo fetchmail desde la lnea de comandos. La alternativa es dejar a Fetchmail corriendo como un demonio que se descargar el correo nuevo y no leido de GMail, peridicamente (usando el parmetro -d y un periodo medido en segundos). Si adems, queremos que Fetchmail se lance como demonio en cuanto el host arranca, basta con que editemos el fichero:

root# editor /etc/rc.local

e insertermos la lnea justo antes de la l’inea que indica “exit 0”:

su su-nombre-de-usuario-en-su-host -c "fetchmail -d 60"

En este ejemplo se reclama el correo cada 60 segundos. Tambin es posible modificar el fichero:

/etc/default/fetchmail

para lanzar o parar Fetchmail como demonio.

11 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.

11.1 Instalaci’on

Debian’s:
 
root# apt-get install mutt

Red Hat’s:
 
root# yum install mutt

Gentoo’s:
 
root# emerge mutt

11.2 Utilizaci’on

Mutt es un MUA que funciona en una consola de texto, pero no por ello deja de ser muy funcional. Veamos su utilizaci’on b’asica:

Enviar un correo:
La forma m’as simple de enviar un correo es:
# En este ejemplo nos enviamos un correo  
alumno$ mutt alumno@localhost

Mutt preguntar’a si deseamos modificar el destinatario. Pulsar <Enter> si no es as’i. Mutt preguntar’a por un subject. Pulsar <Enter> cuando lo hayamos especificado. Mutt usar’a 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’e instalado, tal como joe, vi, nano, vim, etc.). Cambiar este comportamiento con:

alumno$ export EDITOR=/path/al/editor

Cuando hayamos salvado el cuerpo del mensaje (recu’erdese que Mutt utiliza un editor de ficheros ASCII externo) y hayamos cerrado el editor, Mutt mostrar’a un menu para enviar el mensaje (pulsar <y>), abortar (<q>), cambiar el destinatario (<t>), a nadir 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’on de la entrada est’andar. As’i, es muy sencillo enviar a alguien un fichero:

alumno$ mutt alumno@host < fichero.txt

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

Mutt mostrar’a 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’i lo lee Mutt. Cuando es le’ido por Mutt (no todav’ia por nosotros), Mutt tratar’a de almacenarlo en nuestro home, concretamente en el fichero mbox.8 Mutt pude procesar cualquier Mail Box a trav’es de la opci’on -f. Ejemplo:

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