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