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.
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.
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
Una direcci’on de correo es cualquier cadena que contiene, al menos, un s’imbolo @. Ejemplo:
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:
son la misma direcci’on.
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.
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.
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.
Los mailers consultan al DNS cuando tienen que reenviar hacia otro mailer un correo electr’onico. Por ejemplo, con:
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.
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.
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:
El formato de una petici’on es siempre una cadena ASCII imprimible:
donde <verb> puede ser:
V’ease el RFC correspondiente para conocer el resto de verbos.
El formato de una respuesta es siempre una secuencia de cadenas ASCII imprimibles:
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.
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.
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:
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.
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.
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.
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.
Especifica la lista de destinatarios. Cada destinatario es separado del siguiente mediante una “,” (una coma). Ejemplo:
En este ejemplo hay tres destinatarios.
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.
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.
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.
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:.
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.
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.
Indica la lista de mailers a los que puede enviarse un bounce message cuando aparece alg’un problema con la entrega del e-mail.
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:
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.
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.
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.
Para configurar un servidor de correo debemos tener en cuenta varios aspectos:
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.
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.
y aada la siguiente lnea:
Salve el fichero.
y cambie la lnea:
por:
y ahora ejecute:
y cambie la lnea:
por:
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:
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.
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).
y esperar a recibir el mensaje de bienvenida por parte del servidor de correo.7 Dicho mensaje comenzar’a siempre por 220.
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.
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:
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.
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:
e insertermos la lnea justo antes de la l’inea que indica “exit 0”:
En este ejemplo se reclama el correo cada 60 segundos. Tambin es posible modificar el fichero:
para lanzar o parar Fetchmail como demonio.
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.
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:
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:
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:
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: