Anatomía de un mensaje de correo-e

Como hemos comentado en la introducción, el formato de los mensajes de correo está especificado en el rfc822 y su sucesor, el rfc2822.

Un mensaje está compuesto de dos partes: las cabeceras y el cuerpo. Recordemos que, además del propio mensaje, existe el concepto de 'sobre', compuesto por una dirección de origen (o remite) y otra de destino. Estas últimas son utilizadas por los MTAs, los sistemas encargados de hacer llegar un mensaje a su destino o, en caso de no ser posible, informar de ello a quien origina el mensaje.

Las direcciones de origen y destino 'del sobre' no están habitualmente disponibles para los programas de correo que utilizan los usuarios, que en su lugar disponen de las cabeceras del mensaje. Parte de la confusión de muchos usuarios, en estos tiempos de correo basura, viene de este hecho, pero de eso hablaremos más adelante.

Para entender mejor lo que sigue, aconsejamos que el lector localice en su programa de correo la opción, que casi todos proporcionan, de ver las cabeceras de los mensajes, para así disponer de ejemplos reales.

Un mensaje comienza con las cabeceras, y la primera línea vacía tras ellas marca el comienzo del cuerpo.

Las cabeceras

Cada cabecera consta de un nombre, o identificador, y a continuación, separado de éste por el carácter 'dos puntos' (:), su valor. Si una línea de la parte de cabeceras (esto es, antes de la primera línea vacía, que indica el fin de las mismas) comienza por espacios, se considera que es continuación de la línea anterior.

Los nombres de las cabeceras están determinados en los RFCs, aunque se permite que se puedan añadir otras nuevas, siempre que sus nombres comiencen por 'X-'. Esto se usa por ejemplo en los sistemas antivirus que cada vez más se usan en los servidores de correo, que pueden añadir cabeceras como:

X-Virus-Scanned: by amavisd-new at uco.es

que informan de que el mensaje ha sido analizado por un antivirus y por tanto, si ha llegado a su destino es porque no está infectado (el uso que se pueda hacer de estas cabeceras o la confianza que puedan dar al usuario es otro asunto).

Las principales cabeceras que todo mensaje debe llevar son:

From: Remitente del mensaje

To: Destinatario

Subject: Asunto (breve descripción, típicamente de una línea o menos)

Date: Fecha en que se envió

Hay otras que aparecen a veces:

Cc: Otro/s destinatario/s, además de quien figura en el 'To:'

Reply-To: A qué dirección debe ir la respuesta del mensaje (si la hay). Sólo aparece en caso de que el remitente no desee que se use para eso la dirección que figura en 'From:'

Return-Path: El remitente 'del sobre' del mensaje

Es importante tener en cuenta que la mayoría de las cabeceras (entre las que están todas las importantes), las pone el programa que envía el mensaje, a instancias de la persona que lo utiliza. Pero cuando se trata de mensajes de correo comercial, abusivos o incluso que intentan estafas, no podemos fiarnos de ninguna de esas cabeceras.

Aparte de este tipo de mensajes poco fiables, las cabeceras suelen ser claras de entender, aunque en el caso de los mensajes que nos llegan a través de listas de correo o nos informan de errores producidos, la cosa puede ser un poco más confusa.

Hay otras cabeceras que no han sido puestas por el emisor del mensaje, sino por los MTAs por los que ha pasado hasta llegar a nosotros. Un ejemplo son las que se llaman 'Received:'. Cada MTA (o proceso auxiliar, como antivirus, etc.) por el que pasa un mensaje debe añadir una línea de este tipo. Eso nos sirve para conocer el camino que ha seguido un mensaje, a qué hora pasó por cada sitio, etc...

Desgraciadamente tampoco esas cabeceras son fiables en los casos de mensajes basura, porque pueden haber sido falseadas igualmente. En mensajes legítimos, sin embargo, constituyen una valiosa fuente de información, sobre todo en caso de producirse algún tipo de problema. Cada entidad por la que pasa el mensaje debe añadirle una línea de este tipo ANTES de las que ya hay, de forma que el rastro de un mensaje se sigue comenzando por la última cabecera 'Received:' y de ahí hacia el inicio del mensaje. En mensajes basura, sólo podemos fiarnos de las que han sido puestas por ordenadores de nuestra institución.

El cuerpo

Como hemos dicho, la primera línea en blanco del mensaje indica el fin de las cabeceras y el inicio del cuerpo del mensaje. En los primeros tiempos del correo-e, el contenido consistía en un texto, más o menos breve. No se permitía nada que no fuera texto, de forma que cuando se necesitaba enviar un programa, un fichero PDF o algún otro tipo de fichero binario, era necesario utilizar algún programa que lo 'codificara' en caracteres textuales (imprimibles). El destinatario debía usar el mismo programa para ‘decodificarlo' y extraer así el fichero original. El programa más utilizado en esta primera época (aún hay quien lo usa) fué uuencode/uudecode.

La restricción de no utilizar caracteres no imprimibles aún permanece en las especificaciones del correo-e. Ahora al menos se pueden usar caracteres no anglosajones como vocales acentuadas, ñ, etc. Pero sigue sin poderse enviar tal cual un programa ejecutable o cosas así. Sin embargo se le dio una solución que es la que permite actualmente enviar cualquier tipo de información por correo-e: el conjunto de especificaciones MIME(Multipurpose Internet Mail Extensions).

En resumen, estas especificaciones adaptan el arcaico formato de mensaje a los usos modernos, pero sin alterar en lo fundamental dicho formato original, de forma que un programa de correo antiguo no se vuelva ‘loco’ al recibir un mensaje formado según las reglas modernas, aunque no pueda tratar adecuadamente lo que contiene (en los protocolos de Internet es muy habitual que las mejoras se hagan siempre de forma que no contradigan a las versiones antiguas, al contrario de lo que hacen muchas empresas en sus productos).

Lo que aporta MIME, entre otras cosas que veremos, es algo parecido a lo que hacía uuencode/uudecode, pero sin que el usuario se preocupe de esos detalles. Mediante unas etiquetas especiales que se incluyen en el mensaje, cuyo formato está claramente especificado en el estandar, se indica el tipo de fichero, su nombre, cómo está codificado, etc. También aporta unos mecanismos para adjuntar más de un fichero en un mensaje, etc.

MIME también proporciona un mecanismo que permite que las cabeceras de un mensaje incluyan caracteres con acentos, ñ, etc., algo que inicialmente no se permitía.