RFC 3464: Formato de Notificación de Estado de Entrega
Por qué existe esto
Antes de que se estandarizara el formato DSN, cada servidor de correo generaba mensajes de rechazo en su propio formato de texto libre. Analizar estos "mensajes de rechazo" requería heurísticas frágiles — expresiones regulares que se rompían siempre que un servidor cambiaba su redacción. RFC 3464 define un tipo de contenido MIME legible por máquinas (message/delivery-status) que hace que el procesamiento automatizado de rechazos sea confiable.
Este RFC funciona junto con RFC 3461 (que define cómo solicitar DSN a nivel SMTP) y RFC 3462 (que define el contenedor multipart/report que envuelve el DSN).
Cómo funciona
Un mensaje DSN es un mensaje MIME multipart/report con report-type=delivery-status. Contiene hasta tres partes MIME:
-
Explicación legible por humanos (
text/plain) — texto libre para personas. -
Estado legible por máquina (
message/delivery-status) — los datos estructurados definidos por este RFC. -
Mensaje original (
message/rfc822otext/rfc822-headers) — el original completo o solo sus encabezados, según el parámetroRETde RFC 3461.
El cuerpo delivery-status
La parte message/delivery-status contiene grupos de campos similares a encabezados separados por líneas en blanco:
; Campos por mensaje (un grupo) Reporting-MTA: dns; mail.example.org Original-Envelope-Id: msg-20260311-0042 Arrival-Date: Wed, 11 Mar 2026 10:30:00 -0500 ; Campos por destinatario (un grupo por destinatario) Original-Recipient: rfc822;bob@example.org Final-Recipient: rfc822;bob@example.org Action: failed Status: 5.1.1 Diagnostic-Code: smtp; 550 5.1.1 User unknown Last-Attempt-Date: Wed, 11 Mar 2026 10:30:05 -0500
Detalles técnicos clave
Campos por mensaje
| Campo | Requerido | Descripción |
|---|---|---|
Reporting-MTA |
Sí | El MTA que generó este DSN, como nombre de host DNS |
Original-Envelope-Id |
No | El ENVID de la transacción SMTP original (RFC 3461) |
DSN-Gateway |
No | Presente cuando el DSN fue traducido desde un sistema de correo externo |
Received-From-MTA |
No | El MTA que entregó el mensaje al Reporting-MTA |
Arrival-Date |
No | Cuándo llegó el mensaje original al Reporting-MTA |
Campos por destinatario
| Campo | Requerido | Descripción |
|---|---|---|
Final-Recipient |
Sí | La dirección del destinatario a la que el MTA intentó entregar realmente |
Original-Recipient |
No | El valor ORCPT de la sesión SMTP — la dirección que usó el remitente |
Action |
Sí | Uno de: failed, delayed, delivered, relayed, expanded
|
Status |
Sí | Código de estado mejorado según RFC 3463 (p. ej., 5.1.1) |
Diagnostic-Code |
No | La cadena de error actual del servidor remoto, prefijada por tipo (generalmente smtp) |
Remote-MTA |
No | El MTA que devolvió el error |
Last-Attempt-Date |
No | Cuándo se realizó el último intento de entrega |
Will-Retry-Until |
No | Para acciones delayed, cuándo el MTA se rendirá |
Valores de acción
| Acción | Significado |
|---|---|
failed |
Fallo permanente — el mensaje no será entregado (rechazo duro) |
delayed |
Fallo temporal — aún reintentos (rechazo suave) |
delivered |
Entregado exitosamente en el buzón del destinatario |
relayed |
Reenviado a un entorno que puede no generar más DSN |
expanded |
Entregado a una lista de correo o alias que se expandió a múltiples destinatarios |
Ejemplo de mensaje DSN completo
From: mailer-daemon@mail.example.org To: alice@sender.example.com Subject: Delivery Status Notification (Failure) MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="DSN-BOUNDARY-001" --DSN-BOUNDARY-001 Content-Type: text/plain Your message to bob@example.org could not be delivered. The recipient's mailbox does not exist. --DSN-BOUNDARY-001 Content-Type: message/delivery-status Reporting-MTA: dns; mail.example.org Original-Envelope-Id: msg-20260311-0042 Arrival-Date: Wed, 11 Mar 2026 10:30:00 -0500 Final-Recipient: rfc822;bob@example.org Action: failed Status: 5.1.1 Diagnostic-Code: smtp; 550 5.1.1 User unknown --DSN-BOUNDARY-001 Content-Type: text/rfc822-headers From: alice@sender.example.com To: bob@example.org Subject: Meeting tomorrow Message-ID: <abc123@sender.example.com> --DSN-BOUNDARY-001--
Errores comunes
-
Analizar solo la parte legible por humanos. La sección
text/plaines para personas. Los sistemas automatizados deben analizar la partemessage/delivery-status, que tiene una estructura estable y definida. -
Ignorar la clase de código de estado. El primer dígito es crítico:
2.x.x= éxito,4.x.x= fallo temporal (reintentar más tarde),5.x.x= fallo permanente (dejar de intentar). Tratar todos los rechazos igual daña tu reputación. -
No coincidir Original-Envelope-Id. Si estableces
ENVIDen RFC 3461, usaOriginal-Envelope-Idpara correlacionar DSN con envíos específicos. Depender solo deFinal-Recipientfalla cuando hay alias o reenviadores. -
Confundir Final-Recipient con Original-Recipient. Después del reenvío,
Final-Recipientpuede ser una dirección completamente diferente. Siempre verificaOriginal-Recipientcuando esté disponible. -
Tratar
relayedcomodelivered. Una acciónrelayedsignifica que el mensaje salió del entorno consciente de DSN. Puede que nunca obtengas un estado final.
Impacto en la capacidad de entrega
-
Clasificación automatizada de rechazos. El campo
Statusse asigna a códigos de estado mejorados de RFC 3463. El código5.1.1(usuario desconocido) significa eliminar la dirección;4.2.2(buzón lleno) significa reintentar más tarde. La clasificación correcta es la base de la higiene de listas. -
Correlación de bucle de retroalimentación. El
Original-Envelope-Idte permite vincular rechazos a campañas específicas, llamadas API o transacciones — esencial para depuración y análisis. -
Manejo de rechazo duro vs. suave. Trata
Action: failedcon estado 5.x.x como permanente — suprime la dirección. TrataAction: delayedcon 4.x.x como transitorio — reintenta con retroceso pero suprime después de fallos repetidos. - Protección de reputación. Procesar DSN rápidamente y eliminar direcciones inválidas evita golpear repetidamente buzones muertos, que los proveedores de buzones rastrean como una señal de reputación negativa.