featured image

Esta es una pregunta que no todo el mundo se formula y, realmente, no es tan simple contestar. Quizás de todos los servicios de Internet, el sistema de correo es uno de los más complicados que existe. ¿Te has preguntado alguna vez cómo funciona?

Actualización (24 de octubre de 2018): se han revisado los artículos referentes al tema cómo funciona. Si tienes alguna sugerencia acerca de algún servidor que quieras saber cómo funciona, déjanos un comentario.

Actualización (15 de abril de 2021): agregado vídeo explicativo:

Conceptos

En principio, vamos a definir algunos términos que usaremos de forma natural en el resto del artículo, para adentrar lo que son los términos de funcionamiento del email:

  • MUA: (Mail User Agent, Agente de Usuario de Correo), es el sistema que se encarga de recibir y enviar emails usando los protocolos STMP (para el envío) y POP3 o IMAP (para la recepción). Ejemplos de MUA son evolution, kmail, sylpheed o incluso squirrelmail (los webmails).
  • MTA: (Mail Transfer Agent, Agente de Transferencia de Correo), es el sistema que se encarga de tomar el email de un MUA o de otro MTA y entregarlo a otro MTA o a un MDA, en caso de que el email pertenezca al dominio propio del MTA. Ejemplos de MTA son postfix, qmail, exim, cyrus y courier.
  • MDA: (Mail Delivery Agent, Agente de Entrega de Correo), es el sistema que se encarga de la recpeción del email por parte de un MTA, y lo almacena de la forma que tenga configurada. Los MDA pueden almacenar en disco, base de datos o llamar a otro programa para hacer el procesado de emails (p.ej: listas de correo, sistemas de control de incidencias, etc.). Ejemplos de MDA son procmail, maildrop... cyrus y courier implementan también sus propios MDA.
  • MAA: (Mail Access Agent, Agente de Acceso de Correo), es el sistema que se encarga del acceso al correo almacenado. Sería como la oficina de correos, y por ello su protocolo más usado es POP3 (Post-Office Protocol version 3). Se encarga de hacer accesible lo buzones a equipos remotos. Ejemplos de MAA son dovecot, uw, qpopper... cyrus y courier implementan también sus propios MAA.

Además de los elementos físicos que conforman la infraestructura del sistema de correo electrónico tenemos otros conceptos referentes al propio mensaje:

  • Dirección de Correo Electrónico conocida simplemente como dirección de email o más corto aún email. Es una cadena de texto separada en dos partes por una arroba (@) donde la primera parte suele ser el nombre del usuario y la segunda parte corresponde al dominio.
  • Cabeceras son datos a modo clave-valor presentes dentro de un mensaje de correo electrónico. Estas cabeceras proveen información sobre el mensaje tales como quién lo envió (From), a quiénes se envió (To y Cc), los MTA por los que ha pasado (Received), el asunto del mensaje (Subject), la fecha (Date) y otra información necesaria para poder leer correctamente el cuerpo del mensaje.
  • Cuerpo del mensaje es el contenido en sí. Este cuerpo puede ser texto plano o puede ser un contenido formateado para contener varios contenidos marcados por un Content-type específico. De esta forma podemos enviar no solo un email en texto plano, sino también adjuntar una versión de texto enriquecido en HTML y adjuntos.
  • Mensaje es el contenido enviado de un punto a otro a través de los MTA hasta llegar al sistema de almacenamiento y después recuperado por el usuario. Este mensaje está escrito de una forma específica. Al inicio al igual que ocurre con las peticiones HTTP encontramos las cabeceras. Tras una línea en blanco comienza el cuerpo del mensaje.
  • Buzón de correo es donde el MDA almacena los mensajes recibidos para un usuario de correo. Cada usuario de correo tendrá su propio buzón de correo.

También referente a la forma de conexión podemos encontrar otros conceptos:

  • Relay es cuando un mensaje recibido en un MTA no pertenece al dominio que controla el MTA y debe enviarlo al MTA propiedad de ese dominio. Esta técnica se emplea de forma lícita por parte de los dominios propios a los que un usuario se conecta para enviar un email a otra persona de otro dominio. Pero también se emplea de forma ilícita por gente que quiere enviar spam sin ser detectado aprovechando la mala configuración de ciertos servidores de correo que permiten de forma abierta enviar emails desde otros dominios a dominios no controlados por ellos.
  • Forward es un tipo de reenvío donde puede modificarse el contenido del email original o no. Actualmente no muchos clientes de correo lo permiten pero autenticándote con tu usuario en el servidor era posible enviar un email recibido sin modificar haciendo creer al receptor que el email fue enviado originalmente para él. La única modificación está en la cabecera Received donde queda registrado este hecho.
  • Spam es un tipo de mensaje con contenido no deseado y no solicitado por el receptor. Es común que estos mensajes también contengan contenido ilícito yendo desde la venta de fármacos, drogas, productos fraudulentos o proposiciones comerciales fradulentas o sexuales.
  • Redirección o Alias es cuando una dirección de correo electrónico es en realidad una dirección virtual que será empleada para ser redirigida a una aplicación, otra dirección de email o incluso varias otras direcciones de email diferentes.

MTA: Protocolo SMTP

Como decíamos cada sistema tiene su propio protocolo. El protocolo para el envío de los mensajes es SMTP. Este protocolo es muy simple. Se basa en un intercambio de información que va así:

$ telnet gmail-smtp-in.l.google.com 25
Trying 108.177.119.26...
Connected to gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP m15-v6si1661584edp.114 - gsmtp
HELO email
250 mx.google.com at your service
MAIL FROM: mi@dominio.com
555 5.5.2 Syntax error. m15-v6si1661584edp.114 - gsmtp
MAIL FROM: <mi@dominio.com>
250 2.1.0 OK m15-v6si1661584edp.114 - gsmtp
RCPT TO: <...@gmail.com>
250 2.1.5 OK m15-v6si1661584edp.114 - gsmtp
DATA
354  Go ahead m15-v6si1661584edp.114 - gsmtp
Subject: prueba
From: "Manuel Rubio" <mi@dominio.com>
To: "Manuel Rubio" <...@gmail.com>

Hello!
.
250 2.0.0 OK 1540381563 m15-v6si1661584edp.114 - gsmtp
QUIT
221 2.0.0 closing connection m15-v6si1661584edp.114 - gsmtp
Connection closed by foreign host.

Como ves, ha funcionado. Hemos enviado un mensaje a través de telnet al servidor de GMail a mi cuenta de correo (la he eliminado por ...).

Las cabeceras que aparecen cuando abrimos el mensaje en GMail son:

Delivered-To: ...@gmail.com
Received: by 2002:a2e:2151:0:0:0:0:0 with SMTP id h78-v6csp482083ljh;
        Wed, 24 Oct 2018 04:46:03 -0700 (PDT)
Received: from email ([217.111.X.X])
        by mx.google.com with SMTP id m15-v6si1661584edp.114.2018.10.24.04.45.18
        for <...@gmail.com>;
        Wed, 24 Oct 2018 04:46:02 -0700 (PDT)
Date: Wed, 24 Oct 2018 04:46:02 -0700 (PDT)
Message-Id: <5bd05b7a.1c69fb81.3cefc.5b19SMTPIN_ADDED_MISSING@mx.google.com>

Entre otras cabeceras agregadas por GMail para intentar autenticar el mensaje.

Protocolo MAA: IMAP y POP3

Para la recuperación de los emails por parte del cliente de correo disponemos de POP3 e IMAP. Ambos son diferentes. Mientras que POP3 permite mejor la recogida de emails eliminándolos en el mismo proceso del servidor para dejar copia únicamente en el cliente de correo, IMAP funciona al contrario potenciando una estructura de carpetas en el servidor para organizar los emails y obtener únicamente los emails necesarios para ser leídos. Mantiene el estado de lectura y otra información.

Cuando empleamos solo un cliente de correo en nuestro ordenador personal y no tenemos intención de emplear otros clientes (en dispositivos móviles u otros equipos) entonces POP3 es una muy buena opción. Además porque si nuestro servidor de correo tiene una cuota de espacio de esta forma mantenemos siempre el buzón vacío conteniendo únicamente los emails que no hayamos leído. Potencia además el uso del ancho de banda. Solo leemos una única vez cada email y sino tenemos emails el sistema puede desconectarse hasta la siguiente comprobación.

Por otro lado, si queremos emplear sistemas de webmail y más de un cliente de correo diferente lo ideal es mantener todos los emails en el servidor y emplearlos a través de IMAP. Este protocolo nos permite organizar los emails en carpetas dentro del servidor y mantiene el estado de lectura de los emails además para saber si los habíamos leído o no e incluso si los habíamos marcado como importantes.

Ciertos servidores también permiten el uso de carpetas compartidas a través de IMAP para diferentes usuarios de email.

Nombres de dominio

Normalmente un servicio de correo dispone de uno o varios servidores atendiendo el sistema y puede configurarse otros servidores a modo de relay para contener los emails en caso de caída de los principales. Estos servidores mantendrán los emails y serán redireccionados a los principales cuando estén operativos de nuevo.

Puedes ver en cómo funciona el servidor DNS estos registros MX. Una configuración típica sería:

@  IN MX  mail.midominio.com

Donde mail.midominio.com es otro registro de tipo CNAME o A apuntando a la máquina donde está configurado el correo. Ten presente que el dominio midominio.com normalmente no suele estar disponible para poder apuntar al servicio de email. En servidores como los de GMail podemos ver:

gmail.com. IN  MX  5 gmail-smtp-in.l.google.com.
gmail.com. IN  MX  10 alt1.gmail-smtp-in.l.google.com.
gmail.com. IN  MX  20 alt2.gmail-smtp-in.l.google.com.
gmail.com. IN  MX  40 alt4.gmail-smtp-in.l.google.com.
gmail.com. IN  MX  30 alt3.gmail-smtp-in.l.google.com.

Ordenando por prioridad (la 4ª columna) vemos que nuestro sistema debe conectarse al MTA en la dirección de correo gmail-smtp-in.l.google.com cuando intente enviar un mensaje a una dirección de gmail.com.

Funcionamiento a Alto Nivel

Un ejemplo básico, desde el punto de vista de un usuario sería:

  • Un usuario abre su MUA (evolution, kmail u outlook, por ejemplo), escribe un email desde su buzón yo@miemail.com a un amigo, que tiene la dirección de correo el@suemail.com.
  • Su programa MUA se conecta con el MTA que está en el dominio miemail.com, este MTA comprueba que el remitente es suyo y el destinatario es de otro dominio por lo que realiza un relay del email al MTA del dominio suemail.com.
  • El MTA del dominio suemail.com ve que el destinatario es propio, por lo que, libera el email a su MDA.
  • El MDA comprueba el usuario a través de los alias y las reglas configuradas en el equipo y libera el email en el soporte, buzón y carpeta que tiene configurados.
  • El usuario el se conecta a un webmail, que hace de MUA para leer sus emails.
  • Los MUA, para leer emails, ya sean aplicaciones en el equipo o webmails, se conectan a MAA para leer los emails vía POP3 o IMAP, y estos MAA acceden a los datos que han liberado los MDA, por lo que el puede leer el email de yo.

Como dato a tener en cuenta, podemos ver las cabeceras del mensaje completas y aparecerán unas cabeceras redundantes que tienen por nombre Received. Estas cabeceras se agregan a cada paso por un MUA, MTA y MDA.

Spam

Actualización 28/02/2019: he escrito un nuevo artículo para hablar más en profundidad sobre el Spam con algunos ejemplos y advertencias. Puedes leerlo aquí.

Por la forma de funcionamiento del protocolo SMTP (MTA), los antiguos programas que solo comprobaban el remitente y el destinatario, se veían en el problema de que esos datos se pueden falsear sin problemas, con lo que la veracidad de los mismos queda entredicho.

Para solventar estos problemas, se han desarrollado varios sistemas, antispam y de seguridad de conexión, que aseguran, en la medida de lo posible, que estos problemas no sucedan, pero aún así, hay una guerra entre desarrolladores de sistemas de correo para realizar sistemas cada vez más seguros, y spammers para el desarrollo de sistemas que salten esta seguridad.

Por ello, el uso de filtros es cada vez más común en los MTA, MDA e incluso los MUA.

Conclusiones

El sistema de correo es un sistema compuesto por muchos elementos y en la actualidad además otros elementos que originariamente no se incluían para agregar seguridad. Esto ha hecho que muchas empresas deleguen sus sistemas de correo a empresas cuyo negocio es precisamente el sistema de correo como Microsoft con su sistema de correo online de Outlook o Google a través de las soluciones empresariales ofrecidas conjuntamente con GMail.

Entender el protocolo puede ayudarnos a elegir mejor cada uno de los elementos y cuando fallan saber a quién quejarnos e incluso cómo repararlos.

¿Sabías cómo funcionaba el sistema de correo?, ¿las diferencias entre IMAP y POP3?, ¿Necesitas ayuda o guía para elegir una buena solución de correo electrónico?, ¿has sufrido en silencio el Spam? ¡Déjanos tu comentario!