Altenwald Blog
Blog sobre programación, software libre, redes, servidores, ...
Menú
Acerca de... ¿Quiénes somos? RSS
Categorías
sistemas (70) desarrollo (128) historias (25) productividad (49) seguridad (10) libros (25) noticias (45) opinión (35) humor (3)
Etiquetas
programación (111) desarrollo de software (79) erlang (75) opinión (37) noticia (36) libros (28) servidores (26) desarrollo web (24) base de datos (24) administración de sistemas (23) php (22) desarrollo ágil (22) empresa (21) otp (20) ruby (19) ingeniería de negocio (18) elixir (18) desarrollo profesional (16) redes (16) seguridad (14)
2009-04-06
10 min sistemas
¿Cómo funciona el sistema de correo?
[ redes ]  [ correo ]  [ email ]  [ maa ]  [ mda ]  [ mta ]  [ mua ]  [ como-funciona ]  [ spam ] 

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:

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

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

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:

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!

Autor
Manuel Rubio
Programación Concurrente & Erlanger