SincroDev Logo SincroDev

El Viaje de un Email: De "Enviar" a la bandeja de entrada


Escribes un mensaje, pones el destinatario y presionas “Enviar”. El email desaparece de tu pantalla y, segundos después, aparece en la bandeja de entrada del otro lado del mundo. ¿Magia? No, es un sistema diseñado en los años 80 que sigue funcionando sorprendentemente bien.

Capa 1: Tu Cliente de Correo

Todo empieza en tu aplicación (Gmail, Outlook, Thunderbird):

  1. Compone el mensaje en formato MIME (permite texto, HTML, adjuntos)
  2. Añade cabeceras: From, To, Subject, Date, Message-ID
  3. Codifica adjuntos en Base64 (los binarios no viajan bien como texto)
  4. Se conecta a tu servidor SMTP para enviarlo
De: tu@tudominio.com
Para: amigo@otrodominio.com
Asunto: Hola!
                    ┌─────────────────┐
     Tu mensaje ───→│ Cliente Email   │───→ SMTP
                    │ (Gmail/Outlook) │
                    └─────────────────┘

Capa 2: Autenticación con tu Servidor

Antes de enviar, tu servidor necesita saber que eres tú:

  1. Conexión TLS al puerto 587 (o 465) de tu servidor SMTP
  2. Autenticación: usuario y contraseña (o OAuth2 en servicios modernos)
  3. El servidor verifica que puedes enviar desde esa dirección
Tu cliente                          Tu servidor SMTP
    │                                     │
    │ ─── EHLO [tu-pc] ──────────────────→│
    │ ←── 250 OK, soporto AUTH, TLS ──────│
    │ ─── AUTH LOGIN [credenciales] ─────→│
    │ ←── 235 Autenticación exitosa ──────│
    │                                     │
    │      ✓ Listo para enviar            │

Capa 3: El Sobre Digital

Ahora tu cliente envía el email usando comandos SMTP:

MAIL FROM:<tu@tudominio.com>        ← "El remitente es..."
RCPT TO:<amigo@otrodominio.com>     ← "El destinatario es..."
DATA                                 ← "Aquí viene el contenido"
From: Tu Nombre <tu@tudominio.com>
To: Amigo <amigo@otrodominio.com>
Subject: Hola!
Date: Sat, 7 Dec 2025 10:30:00 +0100
Content-Type: text/plain

Este es el cuerpo del mensaje.
.                                    ← Un punto solo = fin del mensaje
QUIT

Dato curioso: El “sobre” (MAIL FROM/RCPT TO) y las cabeceras (From/To) son independientes. Por eso existe el spoofing de emails.

Capa 4: Tu Servidor Procesa

Tu servidor SMTP recibe el mensaje y:

  1. Valida que el destinatario tiene formato correcto
  2. Agrega cabeceras de seguimiento (Received:)
  3. Encola el mensaje para envío
  4. Busca a dónde enviarlo → necesita consultar DNS
┌─────────────────────────────────────────────┐
│            Tu Servidor SMTP                  │
│                                             │
│  Recibido → Validado → Cola de salida       │
│                             │               │
│                             ▼               │
│                    "¿Dónde está             │
│                   otrodominio.com?"         │
└─────────────────────────────────────────────┘

Capa 5: DNS y Registros MX

Para encontrar el servidor de correo del destinatario, se consultan los registros MX (Mail eXchanger):

Consulta DNS: "¿Cuáles son los MX de otrodominio.com?"

Respuesta:
otrodominio.com.  MX  10  mail1.otrodominio.com.
otrodominio.com.  MX  20  mail2.otrodominio.com.
                  ↑    ↑
               Tipo  Prioridad (menor = preferido)

El número indica prioridad. Se intenta primero el 10, si falla, el 20.

Tu servidor                              DNS
    │                                     │
    │ ── MX query: otrodominio.com? ─────→│
    │ ←── MX 10 mail1.otrodominio.com ────│
    │                                     │
    │ ── A query: mail1.otrodominio.com? →│
    │ ←── A 203.0.113.50 ─────────────────│
    │                                     │

"Debo conectar a 203.0.113.50:25"

Capa 6: Servidor a Servidor

Tu servidor SMTP se conecta al servidor destino:

Tu servidor SMTP                    Servidor destino
    │                                     │
    │ ─── Conexión TCP puerto 25 ────────→│
    │ ←── 220 mail1.otrodominio.com ──────│
    │ ─── EHLO tudominio.com ────────────→│
    │ ←── 250 OK ─────────────────────────│
    │ ─── MAIL FROM:<tu@tudominio.com> ──→│
    │ ─── RCPT TO:<amigo@otrodominio.com>→│
    │ ─── DATA + mensaje ────────────────→│
    │ ←── 250 OK, queued as ABC123 ───────│
    │                                     │
    │      ✓ Mensaje entregado            │

Capa 7: Verificación Anti-Spam

El servidor destino no confía ciegamente. Hace verificaciones:

SPF (Sender Policy Framework)

“¿El servidor que envía está autorizado para ese dominio?”

Consulta DNS TXT para tudominio.com:
"v=spf1 include:_spf.google.com ~all"

→ Solo los servidores de Google pueden enviar desde @tudominio.com

DKIM (DomainKeys Identified Mail)

“¿El mensaje fue firmado por el dominio remitente?”

Cabecera del email:
DKIM-Signature: v=1; a=rsa-sha256; d=tudominio.com; s=selector1;
                h=from:to:subject:date; bh=abc123...; b=xyz789...

El servidor destino:
1. Obtiene la clave pública desde DNS (selector1._domainkey.tudominio.com)
2. Verifica la firma
3. ✓ El mensaje no fue alterado en tránsito

DMARC (Domain-based Message Authentication)

“¿Qué hacer si falla SPF o DKIM?”

_dmarc.tudominio.com TXT "v=DMARC1; p=reject; rua=mailto:reports@tudominio.com"

p=reject → Rechazar emails que fallen las verificaciones
┌─────────────────────────────────────────────┐
│        Verificaciones Anti-Spam             │
│                                             │
│  ┌─────┐    ┌──────┐    ┌───────┐          │
│  │ SPF │ +  │ DKIM │ +  │ DMARC │ = ✓ o ✗  │
│  └─────┘    └──────┘    └───────┘          │
│                                             │
│  + Filtros de spam (contenido, reputación)  │
└─────────────────────────────────────────────┘

Capa 8: Entrega al Buzón

Si todo está bien, el servidor destino:

  1. Determina el buzón local del usuario
  2. Aplica filtros del usuario (reglas, carpetas)
  3. Almacena el mensaje (formato Maildir o base de datos)
  4. Actualiza índices para búsqueda
Servidor destino


┌─────────────────┐
│  MDA (Dovecot)  │ ← Mail Delivery Agent
│                 │
│  Filtros Sieve  │ ← "Si viene de X, mover a carpeta Y"
│       │         │
│       ▼         │
│  /home/amigo/   │
│  Maildir/new/   │ ← Mensaje almacenado
└─────────────────┘

Capa 9: El Destinatario Lee

Cuando tu amigo abre su cliente de correo:

  1. Se conecta vía IMAP (o POP3) a su servidor
  2. Sincroniza la bandeja de entrada
  3. Descarga el mensaje nuevo
  4. Renderiza el contenido (HTML, imágenes, adjuntos)
Cliente del destinatario              Servidor IMAP
         │                                  │
         │ ─── LOGIN [credenciales] ───────→│
         │ ─── SELECT INBOX ───────────────→│
         │ ←── Tienes 1 mensaje nuevo ──────│
         │ ─── FETCH 1 BODY[] ─────────────→│
         │ ←── [Contenido del email] ───────│
         │                                  │

    📧 "¡Tienes un email de tu@tudominio.com!"

El Diagrama Completo

┌─────────────────┐
│  Tu Cliente     │
│  (Gmail/etc)    │
└────────┬────────┘
         │ SMTP (587)

┌─────────────────┐     ┌─────────────────┐
│  Tu Servidor    │────→│      DNS        │
│     SMTP        │     │  "¿MX de dest?" │
└────────┬────────┘     └─────────────────┘
         │                      │
         │ ←── MX records ──────┘

         │ SMTP (25)

┌─────────────────────────────────────────────┐
│          Servidor Destino                    │
│                                             │
│  ┌─────────┐   ┌─────────┐   ┌──────────┐  │
│  │  SMTP   │ → │ Checks  │ → │   MDA    │  │
│  │ Recibe  │   │SPF/DKIM │   │ Entrega  │  │
│  └─────────┘   └─────────┘   └──────────┘  │
│                                     │       │
│                              ┌──────▼─────┐ │
│                              │   Buzón    │ │
│                              │   IMAP     │ │
│                              └──────┬─────┘ │
└─────────────────────────────────────┼───────┘

                               IMAP (993)


                            ┌─────────────────┐
                            │ Cliente destino │
                            │   📧 Mensaje!   │
                            └─────────────────┘

¿Cuánto tiempo toma?

PasoTiempo típico
Cliente → Tu SMTP< 1 segundo
DNS (MX lookup)20-100ms
Tu SMTP → SMTP destino1-5 segundos
Verificaciones SPF/DKIM< 1 segundo
Entrega al buzón< 1 segundo
Sincronización IMAP1-30 segundos
Total3-60 segundos

Puede tomar más si hay greylisting (retraso intencional anti-spam) o colas ocupadas.

¿Qué puede fallar?

ErrorCausa común
550 User not foundEl destinatario no existe
553 Relay deniedTu servidor no está autorizado
421 Too many connectionsRate limiting
550 SPF failTu servidor no está en el registro SPF
Llega a SpamFalla DKIM, mala reputación, contenido sospechoso

Conclusión

Un simple email atraviesa:

  1. Tu cliente → compone y codifica
  2. Tu servidor SMTP → autentica y encola
  3. DNS → encuentra el servidor destino (MX)
  4. Internet → viaja entre servidores
  5. SMTP destino → recibe y verifica (SPF/DKIM/DMARC)
  6. MDA → entrega al buzón
  7. IMAP → el destinatario lo descarga

Un protocolo de más de 40 años (SMTP, 1982) que sigue moviendo más de 300 mil millones de emails al día. No está mal para tecnología de los 80.


Este post es parte de la serie “El Viaje de la Información”, donde exploramos qué sucede realmente cuando interactuamos con nuestros sistemas.


P.D. ¿Qué es el spoofing de emails?

¿Recuerdas que mencionamos que el “sobre” (MAIL FROM) y las cabeceras (From:) son independientes? Ahí está el problema.

El protocolo SMTP original (1982) fue diseñado para una época de confianza. No verifica que quien dice ser el remitente realmente lo sea. Es como enviar una carta postal escribiendo cualquier nombre en el remitente.

MAIL FROM:<ceo@empresa.com>     ← El sobre dice "CEO"
...
From: CEO Empresa <ceo@empresa.com>   ← La cabecera dice "CEO"

Pero el email lo envió cualquier servidor random.

Esto es email spoofing: falsificar la dirección del remitente para que parezca que el email viene de alguien más (tu banco, tu jefe, un servicio conocido).

Por eso existen SPF, DKIM y DMARC: son parches que se añadieron décadas después para verificar que el remitente es quien dice ser. Si un dominio tiene estos registros bien configurados, los emails falsificados serán rechazados o irán a spam.

Moraleja: si recibes un email sospechoso “del banco” pidiéndote datos, recuerda que el From: puede mentir. Verifica siempre el dominio real y los indicadores de autenticación de tu cliente de correo.