← RFC Reference

RFC 2049: Parte 5 de MIME — Criterios de Conformidad y Ejemplos

Standards Track MIME — Multipurpose Internet Mail Extensions Published March 2026
ELI5: Los RFC 2045–2047 definen las reglas de MIME. RFC 2049 es el examen: especifica exactamente qué debe hacer tu software para ser "compatible con MIME" y proporciona ejemplos desarrollados para verificar tu implementación. Si MIME fuera un código de construcción, esto sería la lista de verificación de inspección.

Por qué existe

La especificación MIME abarca cuatro RFCs técnicos (2045, 2046, 2047 y 2048). Los implementadores necesitan una respuesta clara a: "¿cuál es lo mínimo que mi software debe manejar para ser conforme a MIME?" RFC 2049 proporciona esa respuesta, junto con mensajes de prueba canónicos que los implementadores pueden usar para verificar sus analizadores.

Sin un documento de conformidad, diferentes implementaciones soportarían diferentes subconjuntos de MIME, lo que causaría fallos de interoperabilidad. RFC 2049 establece el mínimo: cada sistema compatible con MIME debe manejar al menos estos tipos de contenido, codificaciones y estructuras.

Cómo funciona

RFC 2049 define dos niveles de conformidad, cada uno con requisitos específicos.

Requisitos del agente de envío

Un agente de envío conforme a MIME (MUA o biblioteca de correo) debe:

  1. Incluir siempre MIME-Version: 1.0 en cada mensaje que utilice características MIME.
  2. Incluir un encabezado Content-Type cuando el cuerpo sea algo distinto a texto ASCII simple.
  3. Usar una Content-Transfer-Encoding válida que garantice que el cuerpo del mensaje pueda atravesar puertas de enlace SMTP de 7 bits (base64 o quoted-printable para contenido no ASCII).
  4. Codificar correctamente los campos de encabezado usando palabras codificadas RFC 2047 cuando aparezcan caracteres no ASCII en encabezados como Subject o nombres para mostrar From.
  5. Generar límites multipart válidos que no aparezcan en ninguna parte del cuerpo incluida.

Requisitos del agente receptor

Un agente receptor conforme a MIME debe:

  1. Reconocer MIME-Version: 1.0 y tratar el mensaje como codificado en MIME.
  2. Analizar encabezados Content-Type y Content-Transfer-Encoding, incluidos todos los parámetros.
  3. Decodificar base64 y quoted-printable de las codificaciones de transferencia de contenido.
  4. Manejar todos los tipos multipart — como mínimo multipart/mixed, multipart/alternative, multipart/digest y multipart/parallel. Los subtipos multipart desconocidos deben tratarse como multipart/mixed.
  5. Manejar message/rfc822 — mostrar el mensaje encapsulado u ofrecer al menos guardarlo.
  6. Manejar tipos de contenido no reconocidos con elegancia — ofrecer guardar la parte del cuerpo como archivo en lugar de fallar o descartar silenciosamente. Los tipos no reconocidos deben tratarse como application/octet-stream.
  7. Decodificar palabras codificadas RFC 2047 en campos de encabezado.
  8. Manejar el parámetro charset en tipos de texto, soportando al menos US-ASCII e ISO-8859-1, e idealmente UTF-8.

Principio de robustez

RFC 2049 refuerza la Ley de Postel para MIME: sé estricto en lo que envías, liberal en lo que aceptas. Un receptor conforme debe hacer un esfuerzo máximo por mostrar incluso mensajes MIME ligeramente malformados en lugar de rechazarlos categóricamente.

Detalles técnicos clave

Ejemplos canónicos

RFC 2049 incluye ejemplos elaborados de mensajes MIME. Aquí está el patrón para un mensaje multipart/alternative bien formado con texto plano e HTML:

MIME-Version: 1.0
From: sender@example.com
To: recipient@example.com
Subject: MIME conformance test
Content-Type: multipart/alternative; boundary="boundary42"

--boundary42
Content-Type: text/plain; charset=us-ascii

This is the plain text version.

--boundary42
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html><body><p>This is the <strong>HTML</strong> version.</p></body></html>

--boundary42--

Manejo de tipos desconocidos

Un requisito de conformidad clave: cuando un agente receptor encuentra un Content-Type que no entiende, debe tratarlo como application/octet-stream y ofrecer guardarlo. Esta regla garantiza compatibilidad hacia adelante: se pueden definir nuevos tipos de medios sin romper clientes existentes.

; Unknown type encountered by a client
Content-Type: application/vnd.custom-format
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="data.custom"

; Conformant client treats this as application/octet-stream
; and offers the user a "Save As" dialog

Subtipos multipart desconocidos

De manera similar, los subtipos multipart desconocidos deben tratarse como multipart/mixed. Esto significa que el cliente muestra cada parte secuencialmente. Por ejemplo, multipart/report (definido más tarde en RFC 3462) seguirá mostrándose correctamente en clientes antiguos que lo traten como mixto.

Soporte de charset mínimo

Las implementaciones conformes deben soportar al menos:

En la práctica, cualquier implementación moderna debe soportar UTF-8. No hacerlo en 2024+ es un incumplimiento de conformidad en espíritu, incluso si la especificación de 1996 no lo exigía.

El límite MIME/no-MIME

Los mensajes sin encabezado MIME-Version: 1.0 se tratan como texto ASCII simple pre-MIME, independientemente de si sucede que contengan encabezados Content-Type. El encabezado MIME-Version es el guardián: sin él, el procesamiento MIME no se activa.

Errores comunes

Impacto en la entregabilidad

Related RFCs