Para nosotros, los usuarios, enviar un correo electrónico es tan sencillo como abrir el webmail del proveedor que utilizamos o abrir nuestro gestor de correo electrónico, escribir lo que queramos y darle a enviar. Pero, ¿qué ocurre en la realidad? ¿Cómo se transmite dicho correo a través de internet? Sorprendentemente, no es tan difícil como podría parecer a priori. Como en casi toda la estructura de internet, el envío de correos utiliza una estructura cliente - servidor: un cliente envía los datos y un servidor los recibe y los procesa.
Para la transferencia de estos datos que componen los correos electrónicos se utiliza el protocolo SMTP (Simple Mail Transfer Protocol), que define una serie de normas para el envío. Estas normas comunes son necesarias a la hora de estandarizar la comunicación. Sin ellas, es como si nuestro cliente hablara alemán y el servidor al que vamos a enviarlo hablara ruso: simplemente no se entenderían. SMTP es uno de los protocolos oficiales de internet (podéis consultar la lista completa aquí).
Como el propio nombre del protocolo indica, SMTP es un protocolo muy básico y sencillo, a la vez que útil. Toda comunicación que lo utiliza se basa en mensajes de texto codificado en ASCII. Estas líneas, que se intercambian entre correo y servidor, llevan un orden estricto y que debe cumplirse para que la comunicación sea correcta. El cliente envía un comando y el servidor, en función de lo recibido, devuelve una respuesta. A continuación podéis ver el ejemplo de un intercambio básico entre un correo y un servidor.
S: 220 Server SMTP
C: HELO miequipo.midominio.com
S: 250 Hello, please to meet you
C: MAIL FROM:
S: 250 Ok
C: RCPT TO:
S: 250 Ok
C: DATA
S: 354 End data with "."
C: Subject: Campo de asunto
C: From: yo@midominio.com
C: To: destinatario@sudominio.com
C: Hola,
C: Esto es una prueba.
C: Adiós.
C: .
S: 250 Ok: queued as 12345
C: QUIT
S: 221 Bye
Como ya os habréis dado cuenta, todos los mensajes del servidor (marcados en negrita) van compuestos por un número y un texto adicional. Este texto es aclaratorio más que nada, y lo que realmente importa es el número. En él se basan los clientes para saber si la operación ha sido o no correcta. Por ejemplo, cuando el cliente envía el comando MAIL FROM con el usuario destino, si éste existe y es correcto, el servidor devuelve un mensaje 250 OK.
El cliente es el que se encarga de traducir los datos que el usuario escribe (direcciones de correo destino, cuerpo de correo, etc.) a esos comandos que veis ahí. En el cuerpo del correo encapsula también algunos datos básicos que se conocen como cabecera, y que pueden incluir los destinatarios, la fecha y hora de envío, el tipo de codificación... Entre los clientes más conocidos está el Outlook, que pertenece a Microsoft, y Thunderbird, que es gratuito y pertenece a Mozilla.
La estructura de la comunicación es tan sencilla como la que se ve en el ejemplo. Primero, cuando el servidor detecta una conexión en un determinado puerto (SMTP usa por defecto el 25), éste le da la bienvenida al cliente con un código 220. Posteriormente, el cliente se presenta con un HELO y comienza a enviar los parámetros del correo. Con el comando MAIL FROM indica el usuario que envía el mensaje, mientras que los comandos RCPT TO (pueden ser varios en un mismo correo) indican los usuarios destino.
Si hasta ahí todo va bien, y el cliente ha recibido confirmación positiva (250 OK), el servidor le pide al cliente que comience a enviar el mensaje línea a línea y que, cuando termine, introduzca un punto para saber que terminó. Finalmente, el servidor confirma que lo ha recibido bien y el cliente se desconecta enviando un QUIT. Como véis, se trata de un protocolo muy sencillo y muy intuitivo.
¿Y qué ocurre, por ejemplo, si un destinatario no existe? ¿O si el destinatario al que se va a enviar el correo no tiene espacio disponible en su cuenta? El servidor, en lugar de enviar confirmaciones positivas (250 OK), enviaría códigos de error que el cliente debe interpretar (algunos, por ejemplo, muestran una ventana emergente que avisa al usuario). En estos dos casos que comento, los códigos de error serían 550 Requested action not taken: mailbox unavailable y Requested mail action aborted: exceeded storage allocation. Todos los códigos de error tienen un identificador asociado de la forma 5XX.
Una vez el servidor recibe el fin de la conexión, procede a archivar una copia del correo en la carpeta asignada al usuario. Al tratarse SMTP de un protocolo solamente de transferencia de mensajes, la misión de su servidor acabaría ahí: recibir y archivar el correo. Para después acceder a él y modificarlo, borrarlo o lo que se desee hacer, es necesario recurrir a otros protocolos (como POP3 o IMAP), que hacen posible que un usuario se conecte al servidor remoto de correo y descargue sus emails a su ordenador local. Pero eso, señores, ya lo dejamos para otro día.
En Xataka ON | Qué es y cómo funciona el protocolo BitTorrent Más información | RFC 0821