← RFC Reference

RFC 2920 – Canalización SMTP

Internet Standard (STD 60) Core SMTP & Message Format Published March 2026
ELI5: El SMTP normal es como una conversación donde dices una frase, esperas a que la otra persona responda, y luego dices la siguiente frase. La canalización es como soltar varias frases seguidas y dejar que la otra persona responda a todas ellas de una vez. No tienes que hacer una pausa entre cada comando, por lo que toda la conversación termina mucho más rápido, especialmente cuando los dos lados están lejos uno del otro.

Por qué existe este RFC

SMTP estándar es un protocolo estricto de solicitud-respuesta. El cliente envía un comando, espera la respuesta del servidor y luego envía el siguiente. Cada viaje de ida y vuelta añade latencia, especialmente en enlaces de red de alta latencia. Para un mensaje con 50 destinatarios, el cliente necesitaría 50 viajes de ida y vuelta separados solo para los comandos RCPT TO.

RFC 2920 define la extensión SMTP PIPELINING, que permite al cliente enviar múltiples comandos en lote sin esperar respuestas individuales. El servidor almacena en buffer y procesa los comandos en orden, luego envía todas las respuestas. Esto reduce dramáticamente el tiempo total de una sesión SMTP.

Pipelining es una de las extensiones SMTP más ampliamente soportadas. Casi todo servidor de correo moderno la anuncia, y la mayoría de las bibliotecas de cliente SMTP la utilizan por defecto.

Cómo funciona

  1. El cliente envía EHLO y confirma que el servidor anuncia PIPELINING en su lista de capacidades.
  2. El cliente agrupa comandos que son seguros para pipelining — típicamente MAIL FROM, uno o más RCPT TO, y DATA.
  3. El cliente envía todos estos comandos en rápida sucesión sin esperar respuestas individuales.
  4. El servidor procesa cada comando en orden y envía una respuesta por comando, en orden.
  5. El cliente lee todas las respuestas y maneja cualquier error (por ejemplo, un destinatario rechazado).

Ejemplo SMTP

Sin pipelining (5 viajes de ida y vuelta para la envoltura):

C: MAIL FROM:<news@example.com> S: 250 2.1.0 OK C: RCPT TO:<alice@recipient.com> S: 250 2.1.5 OK C: RCPT TO:<bob@recipient.com> S: 250 2.1.5 OK C: RCPT TO:<carol@recipient.com> S: 550 5.1.1 User unknown C: DATA S: 354 Start mail input

Con pipelining (1 viaje de ida y vuelta para la envoltura completa):

# El cliente envía todos los comandos de envoltura a la vez C: MAIL FROM:<news@example.com> C: RCPT TO:<alice@recipient.com> C: RCPT TO:<bob@recipient.com> C: RCPT TO:<carol@recipient.com> C: DATA # El servidor responde a los cinco comandos en orden S: 250 2.1.0 OK S: 250 2.1.5 OK S: 250 2.1.5 OK S: 550 5.1.1 User unknown S: 354 Start mail input # El cliente envía los datos del mensaje (carol fue rechazada, pero alice y bob continúan) C: Subject: Weekly update C: C: This week's news... C: . S: 250 2.0.0 OK, queued

Detalles técnicos clave

Qué comandos pueden ser pipelined

No todos los comandos SMTP son seguros para pipelining. RFC 2920 divide los comandos en dos categorías:

Seguro para pipelining Debe esperar respuesta
MAIL FROM EHLO / HELO
RCPT TO STARTTLS
DATA AUTH
RSET QUIT
NOOP contenido de DATA (el cuerpo con puntos escapados)

Los comandos que cambian el estado de la conexión (EHLO, STARTTLS, AUTH) son puntos de sincronización — el cliente debe esperar la respuesta antes de enviar cualquier otra cosa.

Manejo de errores

Al hacer pipelining, algunos comandos en un lote pueden tener éxito mientras otros fallan. El cliente debe asociar respuestas a comandos en orden. Un RCPT TO rechazado no invalida toda la transacción — el mensaje aún se entrega a los destinatarios aceptados. Sin embargo, si MAIL FROM es rechazado, los comandos RCPT TO posteriores también fallarán.

Consideraciones de almacenamiento en búfer TCP

Pipelining depende del almacenamiento en búfer de TCP. El cliente escribe múltiples comandos al socket sin leer, confiando en que el búfer de envío TCP puede contenerlos. Para lotes muy grandes de comandos RCPT TO (cientos o miles), el cliente puede necesitar hacer pipelining en grupos para evitar llenar el búfer TCP y causar un interbloqueo.

Interacción con STARTTLS

Después de una respuesta EHLO que incluya STARTTLS, el cliente no debe hacer pipelining de STARTTLS con otros comandos. El protocolo de enlace TLS cambia el estado de toda la conexión, por lo que es un punto de sincronización duro. Después de que TLS se establece y se envía un nuevo EHLO, el pipelining puede reanudarse.

Errores comunes

Impacto en la entregabilidad

Related RFCs