Comprobación SMTP con telnet

Una guía práctica para probar un servidor de correo a mano. Aprende qué hace cada comando SMTP, cómo responde el servidor y cómo ejecutar una sesión de verificación completa con telnet u openssl.

SMTP (Simple Mail Transfer Protocol) es un protocolo de texto plano, basado en líneas. Eso significa que puedes hablar directamente con un servidor de correo desde un terminal y leer exactamente lo que responde — sin necesidad de software especial. Esta es la forma más transparente de comprobar si un buzón existe, si un servidor es accesible y cómo está configurado.

1. Conexión a un servidor de correo

Primero encuentra el servidor de correo (host MX) del dominio, luego abre una conexión TCP a su puerto SMTP. El puerto clásico es el 25. Los puertos de envío 587 y 2525 se usan con STARTTLS; el puerto 465 es TLS implícito (SMTPS).

Conexión sin cifrar (puerto 25):

telnet mail.example.com 25

Puerto STARTTLS (587 o 25) — telnet no puede hacer TLS, usa openssl:

openssl s_client -connect mail.example.com:587 -starttls smtp -crlf

Puerto TLS implícito (465):

openssl s_client -connect mail.example.com:465 -crlf

Nota: muchos ISP domésticos y móviles bloquean el puerto 25 saliente para combatir el spam. Si telnet ... 25 simplemente se queda colgado, normalmente es por tu proveedor, no por el servidor de correo. Prueba desde un servidor/VPS donde el puerto 25 esté abierto, o usa los puertos de envío.

2. Comandos SMTP explicados

Tú escribes comandos (no distinguen mayúsculas de minúsculas); el servidor responde con un código de 3 dígitos y texto. Termina cada comando con Enter (CRLF).

ComandoQué hace
HELO domainSaludo heredado. Identifica por nombre al host que se conecta. El servidor responde 250.
EHLO domainSaludo moderno (HELO Extendido). Igual que HELO, pero el servidor también enumera las extensiones admitidas (STARTTLS, AUTH, SIZE, PIPELINING…).
MAIL FROM:<addr>Inicia un nuevo mensaje y establece el remitente del sobre (la “ruta de retorno”). Responde 250 si se acepta.
RCPT TO:<addr>El comando clave para la verificación. Pide al servidor que acepte un destinatario. 250 = el buzón se acepta; 550 = no existe tal usuario; 4xx = intenta más tarde (p. ej. lista gris).
DATAComienza el cuerpo del mensaje. El servidor responde 354; envías las cabeceras + el cuerpo y finalizas con un único punto . en su propia línea. (Para una comprobación de verificación nunca llegas a este paso.)
RSETReinicia la transacción actual (olvida MAIL FROM / RCPT TO) sin cerrar la conexión.
VRFY userPide al servidor que verifique un nombre de usuario/dirección. Diseñado precisamente para esto, pero casi siempre deshabilitado hoy en día (devuelve 252 o 502) porque revela direcciones válidas a los spammers.
EXPN listPide al servidor que expanda una lista de correo en sus miembros. Al igual que VRFY, deshabilitado en casi todas partes por la misma razón de privacidad.
STARTTLSActualiza una conexión sin cifrar a TLS cifrado (en los puertos 25/587). Se ofrece solo si aparece en la respuesta EHLO.
AUTH LOGIN / PLAINAutentica a un usuario (necesario para enviar correo a través de los puertos de envío, no para la verificación).
NOOPNo hace nada; el servidor responde 250. Útil para mantener viva una conexión o probar la capacidad de respuesta.
HELPPide al servidor que enumere los comandos que admite.
QUITFinaliza educadamente la sesión. El servidor responde 221 y cierra la conexión.

3. Códigos de respuesta

El primer dígito te indica la categoría, de modo que puedes interpretar cualquier respuesta aunque no conozcas el código exacto:

  • 2xx — éxito (comando aceptado).
  • 3xx — intermedio, el servidor quiere más entrada (p. ej. 354 tras DATA).
  • 4xx — fallo temporal: inténtalo de nuevo más tarde. La dirección aún podría ser válida.
  • 5xx — fallo permanente: el comando o la dirección fueron rechazados.
CódigoSignificado
220Servicio listo (el banner de saludo).
221Cerrando la conexión (respuesta a QUIT).
250OK — comando aceptado (la respuesta que quieres tras RCPT TO).
251 / 252El usuario no es local pero se reenviará / no se puede verificar pero se intentará la entrega.
354Empieza a enviar el cuerpo del mensaje (tras DATA).
421Servicio no disponible, cerrando — a menudo por limitación de tasa.
450 / 451 / 452Problema temporal (buzón ocupado, error local, poco almacenamiento). La lista gris aparece frecuentemente aquí.
502Comando no implementado (respuesta típica a VRFY / EXPN).
550Buzón no disponible / no existe tal usuario — la dirección no existe.
551 / 552 / 553 / 554El usuario no es local / supera la cuota / nombre de buzón incorrecto / transacción fallida.

4. Un ejemplo completo resuelto

Comprobando si john@example.com existe. Las líneas que escribes están marcadas con >; todo lo demás es el servidor:

$ telnet mail.example.com 25 220 mail.example.com ESMTP ready > EHLO checkemail.test 250-mail.example.com Hello checkemail.test 250-STARTTLS 250-SIZE 52428800 250 PIPELINING > MAIL FROM:<probe@checkemail.test> 250 2.1.0 Ok > RCPT TO:<john@example.com> 250 2.1.5 Ok ← el buzón EXISTE > RSET 250 2.0.0 Ok > QUIT 221 2.0.0 Bye

Si, en cambio, el destinatario no existe, verías algo como:

> RCPT TO:<nosuchuser@example.com> 550 5.1.1 <nosuchuser@example.com>: Recipient address rejected: User unknown

5. Cosas que hacen inciertos los resultados

  • Lista gris (greylisting) — el servidor devuelve un 4xx temporal en el primer intento a propósito, pidiéndote que vuelvas más tarde. Un 4xx no significa que la dirección no sea válida.
  • Dominios catch-all — algunos servidores aceptan cada destinatario con 250 y lo resuelven más tarde. Entonces RCPT TO no puede demostrar que un buzón concreto exista. Para detectar un catch-all, prueba con una dirección claramente aleatoria: si también se acepta, el dominio es catch-all.
  • Defensas antiabuso — los servidores pueden retrasar, ocultar el estado real o bloquear sondeos repetidos desde una misma IP. Prueba con cortesía y no satures un servidor.
  • VRFY / EXPN deshabilitados — no confíes en ellos; RCPT TO es la señal práctica.

¿Quieres que esto se haga automáticamente, incluyendo la consulta MX, la detección de catch-all y un veredicto claro? Usa nuestro Verificador de Correo en la página de inicio.