Sólo Programadores Banner 468x60
Este mes en Sólo Programadores
Contenido del CD-ROM
Índice temático
Suscripción

Servicio de correo electrónico.

El servicio de transferencia de correo electrónico entre máquinas pertenecientes a Internet es de los más antiguos que se vienen ofreciendo en la historia de esta gran red. También es, quizás, el más representativo de la filosofía cliente servidor dentro de la extensa familia de protocolos TCP/IP. El servicio de correo electrónico permite llevar a cabo el envío y recepción de mensajes con usuarios de otros ordenadores de la red. El modo más sencillo de implementar este servicio es mantener ficheros de correo, llamados buzones, en cada uno de los sistemas en los que se pretende intercambiar mensajes con alguno de sus usuarios. Este sistema se basa en un método que permite añadir un mensaje a esos ficheros, o bien recuperarlo.
El problema principal aparece cuando los ordenadores entre los que se intercambia correo no tienen continuamente activo el gestor de correo (bien por estar apagados o por no permitir la multitarea). Esto se solventa mediante la instalación de mail servers, sobre los que hablaremos más adelante. Por el momento, centrémonos en la gestión y distribución clásicas de este tipo de mensajería.

Cliente, servicio, servidor y protocolo.
El cliente e-mail es un programa habitualmente llamado "mail" que permite la lectura de los ficheros buzón a cada usuario autorizado. También es capaz de manejar el "spool" de correo, es decir, de enviar mensajes que serán leídos por el servidor e-mail para poder ser distribuidos a otros usuarios. El servicio encargado de proporcionar el intercambio de correo electrónico entre las máquinas se denomina servicio de e-mail, y puede ser ofrecido por distintos programas daemon, de los que el más extendido se llama "sendmail". El daemon sendmail es el servidor de correo electrónico más popular entre las máquinas de Internet. Según algunos estudios, constituye entre el setenta y el ochenta por ciento de las implementaciones existentes hoy en día. El programa más extendido para el intercambio de correo electrónico se denomina sendmail También se conoce con el nombre de "delivery", o bien distribuidor de correo. Realiza su función manteniéndose a la escucha del socket 25, comunicándose con los daemons de otros sistemas para recibir el correo entrante y enviar el correo saliente. En cuanto a la aplicación TCP/IP, se utiliza el protocolo SMTP (Simple Mail Transfer Protocol), el cual se caracteriza por su eficiencia, sencillez y facilidad de depuración, gracias a los mensajes que acompañan a sus comandos.

Funcionamiento detallado de SMTP.
En este artículo se va a mostrar al lector, de forma detallada, cómo funciona una conexión SMTP. Es un ejemplo claro del "modo de hacer" de los protocolos Internet que podemos reproducir fácilmente en las máquinas de nuestra intranet. Utilizaremos para ello dos de las máquinas de nuestra intranet, llamadas 'natacha' y 'sympha'. Aunque 'natacha' es un sistema Unix distinto de Linux y 'sympha' es un servidor OS/2, el mismo ejemplo, utilizando 'menteuse' y 'andora', ambas con Linux, sería sumamente similar y apenas precisaría de cambios.
La gestión de todo lo concerniente a la red por parte de IP y TCP deja a los programas de aplicación como un simple intercambio de comandos y datos. Por ejemplo, el protocolo de correo, del que podemos hacer un seguimiento muy sencillo, trabaja de la manera que vamos a describir a continuación. Nuestro programa de mail abre una conexión contra el mail server remoto. Entonces, envía su nombre de máquina local, así como el nombre del emisor, el buzón de destino y un comando diciendo que empieza el texto del mensaje. En este punto, el servidor finaliza el tratamiento de lo que ha asumido como comandos y comienza a aceptar el mensaje hasta que recibe una marca especial (sencillamente, un punto como principio de línea). Después de esto, ambos programas entienden que el envío de comandos ha sido retomado.
Para ver cómo es el funcionamiento, vamos a suponer que una computadora llamada natacha.intranat quiere enviar el siguiente mensaje:
Date: Sat, 22 Jun 96 04:22:28 GMT
From: charlie@natacha.intranat
To: root@sympha.intranat
Subject: dommage

J'ai égaré un fichier.

El formato del mensaje está basado en Internet standard (RFC 822), donde también se especifica que el mensaje debe transmitirse como net ASCII (ASCII con <cr><lf>), con unas líneas de cabecera determinadas, una línea en blanco y, a continuación, el cuerpo del mensaje que deseamos enviar.
Las direcciones se indican de la forma clásica por todos conocida, como "usuario@máquina".
Éste era el formato que fue diseñado inicialmente, pero rápidamente los estándares se hicieron mucho más flexibles para contemplar casos de máquinas integradas bajo dominios, con la nomenclatura "usuario@máquina.subdominio(s).dominio", donde puede que una de las máquinas sea el servidor central de correo de las demás. Por lo demás, también existe la posibilidad de que el campo "usuario" no sea realmente un usuario del sistema. Esto permite manejar listas de dichos usuarios y nombres genéricos. En el ejemplo que estamos desarrollando, la primera operación consiste en preguntar quién maneja el correo para sympha.intranat.
El servidor de correo responde que sympha.intranat maneja su propio correo. El programa local de correo en natacha consulta la dirección de sympha.intranat, (al servidor de nombres, si lo hubiera), y obtiene su dirección Internet. Entonces, abre una conexión al socket 25 (servidor SMTP) y tiene comienzo la conversación deseada.
El intercambio de mensajería, en lo que se refiere a la aplicación, será el siguiente que se enumera:

(sympha) 220 SYMPHA.INTRANAT SMTP Service at 22 Jun 96 05:02:31 GMT
(natacha) HELO natacha.intranat
(sympha) 250 SYMPHA.INTRANAT - Hello, NATACHA.INTRANAT
(natacha) MAIL From:<charlie@natacha.intranat>
(sympha) 250 MAIL accepted
(natacha) RCPT To:< root@sympha.intranat>
(sympha) 250 Recipient accepted
(natacha) DATA
(sympha) 354 Start mail input; end with < CRLF>.<CRLF>
(natacha) Date: Sat, 22 Jun 96 04:22:28 GMT
(natacha) From: charlie@natacha.intranat
(natacha) To: root@sympha.intranat
(natacha) Subject: dommage
(natacha)
(natacha) J'ai égaré un fichier.
(natacha) .
(sympha) 250 OK
(natacha) QUIT
(sympha) 221 SYMPHA.INTRANAT Service closing transmission channel

Para poder reproducir todo esto, por ejemplo por medio de menteuse y andora, podemos suplantar al programa de mail de menteuse haciendo un telnet a andora, pero al puerto 25, escribiendo la orden siguiente:

telnet andora 25

A partir del momento en hayamos escrito esta imprescindible línea, para andora nosotros ya nos habremos convertido en un programa cliente de correo que ha solicitado una conexión, y como tal nos va a tratar. Continuemos con nuestra explicación.
Los comandos utilizan texto normal, característica del estándar Internet, lo que resultará muy útil a la hora de ver qué es lo que está sucediendo y ser capaces de diagnosticar problemas.
Por ejemplo, el programa de mail mantiene un log de cada conversación. Si algo sale mal, este log puede ser enviado al administrador de correo, quien tiene la posibilidad de interactuar directamente contra el servidor SMTP.
En protocolos que sean un poco más complicados, este proceso no es práctico en absoluto y se utilizan formatos binarios. Sin embargo, suelen estructurarse como registros de C (struct) o bien de Pascal (récord).
Otra característica del ámbito Internet es que las respuestas empiezan con un número definido en el protocolo, lo que evita ambigüedades.
Este número es lo que realmente tiene efecto en la operación de los programas; el texto en realidad es meramente informativo. De entre estos números de respuesta, lo verdaderamente importante es el primer dígito:
Un número de respuesta que empieza por 2 indica una ejecución satisfactoria.
Los que empiezan por 3 requieren una acción a continuación. El rango de los que comienzan por 4 es de error temporal (por ejemplo, cuando el disco se encuentra lleno), y el mensaje tendrá que ser salvado para reintentarlo más tarde. El 5 es error permanente, (por ejemplo, no existe recipiente), y el mensaje tendrá que ser devuelto al emisor con un código de error.
Cada sesión empieza con un HELO, que proporciona el nombre del sistema que ha iniciado la conexión. Después de eso, por medio de una sentencia MAIL será especificado el emisor del correo y un grupo de sentencia RCPT de los recipientes de destino.
Finalmente, se envían los datos mediante DATA, acabándolos con una línea que contiene tan sólo un punto en su primera columna.
Si hubiese que incluir una línea de esas características como parte del mensaje, entonces habría que hacer que el punto fuera doble.
Después de que el mensaje haya sido aceptado por el receptor, el programa de mail tiene dos posibilidades: enviar otro mensaje o bien terminar la conversación mediante QUIT.

El cliente mail: Recepción de correo
Ahora nos vamos a centrar en algunas de las posibilidades más interesantes que nos ofrece el programa cliente mail si nos encontramos bajo Linux. Como se comentó anteriormente, la llamada a 'mail' sin argumentos permitirá a un usuario leer el correo que se encuentre almacenado en su buzón.
Por defecto, los ficheros buzón de correo se almacenan en el directorio /usr/spool/mail con el login name de cada usuario. Una vez que los mensajes han sido leídos, desaparecen del buzón y se almacenan en el fichero 'mbox', que se encuentra en el directorio de conexión del usuario. Para leer el fichero mbox, en vez del buzón correspondiente, se puede utilizar la opción -f.
La lectura de un buzón de correo presenta los mensajes perfectamente ordenados, cada uno con su número de mensaje, con objeto de poder ser accesibles de manera independiente.
Una vez seleccionado un mensaje se puede disponer del mismo para llevar a cabo las siguientes funciones:
1. Visualizar su contenido mediante 'p' (print) o, simplemente, pulsando <intro>
2. Borrarlo pulsando 'd' (delete). Esta acción es reversible mediante el comando 'u' (undo).
3. Responderlo, es decir, mandar correo al emisor del mensaje, con el comando 'r' (reply).
Para poder salir de nuestra sesión con mail se utiliza la orden 'q' (quit) o bien la orden 'x' (exit). Esta última aborta la sesión con todos los cambios que hayamos realizado. Es decir, no efectúa nunca modificaciones sobre el propio buzón del usuario.
Lo explicado hasta ahora constituye lo necesario para una sesión habitual con 'mail'. Sin embargo, el programa 'mail' es bastante más completo. Podemos obtener un manual detallado de sus posibilidades y funcionamiento mediante el comando 'man' de Linux, escribiendo "man mail". (En algunos sistemas, la ayuda para mail se obtiene escribiendo: "man mailx" o "help mail").

El cliente mail: Envío de correo
Si queremos enviar un mensaje a uno o más usuarios que se encuentren en nuestra red, basta con utilizar el comando 'mail' con los nombres de dichos usuarios como parámetros.
Se pueden dar algunas causas por las que un determinado mensaje no pueda ser distribuido, (por ejemplo, por un repentino error del sistema, o bien que el recipiente para determinado usuario no exista, etcétera).En ese caso, el mensaje que haya sido escrito no llegará a perderse, sino que será almacenado dentro de un fichero llamado "dead.letter", que se encuentra situado en el interior del directorio HOME del usuario.
Durante el proceso de escritura de los mensajes que se quieren enviar, se puede utilizar el carácter de escape tilde (~) al principio de una línea, para hacer una llamada a alguna de las funciones especiales que se encuentran a nuestra disposición. Si el juego de caracteres que estamos utilizando es el que se corresponde con el mapa "es.map", dentro de la consola de Linux el carácter tilde se puede obtener pulsando las teclas AltGr-4. Nuevamente podemos obtener una referencia completa de las funciones disponibles consultando la ayuda de Linux.
Algunas de las que pueden ser más útiles para nuestros fines son las que mostramos a continuación:
~!comando - Ejecuta el comando indicado y retorna a la edición de correo.
~e - Invoca a editor de textos establecido. Esta función puede ser muy útil cuando estemos manejando mensajes que sean especialmente extensos.
~h - Edita para su modificación la información de cabecera del mensaje.
~q - Aborta el envío del mensaje, copiando lo que se ha escrito hasta ese momento en el fichero "dead.letter". (Debe estar activa la opción 'save').
~d - Recupera el contenido del fichero "dead.letter" añadiéndolo al mensaje en curso.
~wnomfich - Escribe el mensaje en el fichero "nomfich" y continúa con la edición. Configuración del cliente mail
La activación y la desactivación de todas las opciones de comportamiento que posee el programa 'mail' se pueden realizar a través de dos comandos, denimonados "set" y "unset".
De todas maneras, no todo queda ahú. Se dispone, en efecto, de una segunda posibilidad que puede ser muy útil: también pueden establecerse si utilizamos convenientemente los ficheros de configuración. En la configuración del cliente mail de Linux intervienen dos ficheros:
/etc/mail.rc
$HOME/.mailrc

/etc/mail.rc contiene una serie de opciones del cliente mail que pueden ser controladas mediante los comandos 'set' y 'unset'. De esta forma, se pueden activar y desactivar las distintas opciones booleanas.
Otras opciones se definen con variables que pueden adoptar distintos valores. La información completa sobre la composición del fichero 'mail.rc' se puede obtener tecleando el comando 'man mailx'. La activación y desactivación de las opciones de comportamiento se realiza con los comandos "set" y "unset" Las opciones de comportamiento del cliente mail pueden ser establecidas particularmente para cada usuario a través del fichero '.mailrc', que se encuentra en los distintos directorios de conexión.



Banner 468x60
Explorer 4.0, Netscape 4.0. Resolución 800 x 600.
©Tower Communications 1.998.
Diseño: GRUPO ALBERTINA DE COMUNICACION.