← RFC Reference

RFC 2046: MIME Parte 2 — Tipos de Medios

Standards Track MIME — Multipurpose Internet Mail Extensions Published March 2026
ELI5: [RFC 2045](2045) definió el envolvente para correo electrónico. RFC 2046 define los tipos de cosas que puede poner adentro: texto, imágenes, audio, vídeo, aplicaciones — y crucialmente, cómo poner múltiples cosas en un envolvente. Es la razón por la cual un único correo electrónico puede contener un cuerpo de texto, un cuerpo HTML y tres archivos adjuntos.

Por qué existe

RFC 2045 introdujo Content-Type y codificaciones de transferencia, pero no definió qué tipos de contenido existen ni cómo se comportan. RFC 2046 llena ese vacío al definir:

Este es el RFC que hace posible el correo electrónico moderno. Sin él, cada correo sería un bloque único de texto.

Cómo funciona

Los tipos de medios de nivel superior

Tipo Descripción Subtipos comunes
text Texto legible para humanos text/plain, text/html, text/calendar
image Datos de imagen image/png, image/jpeg, image/gif, image/svg+xml
audio Datos de audio audio/mpeg, audio/ogg
video Datos de vídeo video/mp4, video/webm
application Datos binarios o formatos estructurados application/pdf, application/json, application/octet-stream
multipart Múltiples partes del cuerpo en un mensaje multipart/mixed, multipart/alternative, multipart/related
message Mensaje de correo encapsulado message/rfc822, message/delivery-status

El mecanismo multiparte

Los tipos multiparte son el corazón de RFC 2046. Un mensaje multiparte contiene un parámetro boundary que delimita cada parte:

Content-Type: multipart/mixed; boundary="----=_boundary_001"

------ preámbulo (ignorado por clientes MIME) ------

------=_boundary_001
Content-Type: text/plain; charset=utf-8

This is the first part.

------=_boundary_001
Content-Type: text/plain; charset=utf-8

This is the second part.

------=_boundary_001--
^^^ nótese los -- finales que marcan el fin

Reglas clave para los límites:

Subtipos multiparte

El subtipo le dice al cliente de correo cómo mostrar las partes. Aquí es donde radica la sutileza.

multipart/mixed — Partes secuenciales

El tipo multiparte más común. Las partes se muestran en orden. Se utiliza para "cuerpo del mensaje + archivos adjuntos":

Content-Type: multipart/mixed; boundary="----=_mixed"

------=_mixed
Content-Type: text/plain; charset=utf-8

Here's the report you requested.

------=_mixed
Content-Type: application/pdf; name="report.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="report.pdf"

JVBERi0xLjQKJeLjz9MK...

------=_mixed--

multipart/alternative — El mismo contenido, diferentes formatos

Contiene múltiples versiones del mismo contenido. El cliente de correo elige la mejor que pueda mostrar. Las partes se ordenan de la más simple a la más rica — la última parte es preferida:

Content-Type: multipart/alternative; boundary="----=_alt"

------=_alt
Content-Type: text/plain; charset=utf-8

Welcome to our service!

------=_alt
Content-Type: text/html; charset=utf-8

<h1>Welcome to our service!</h1>
<p>We're glad to have you.</p>

------=_alt--

Así es cómo funciona cada correo HTML bien formado: la alternativa text/plain viene primero, la versión text/html viene última. Un cliente que soporta HTML muestra el HTML; un cliente de texto plano muestra el texto.

multipart/related — Partes vinculadas

Se utiliza cuando las partes se hacen referencia mutuamente. El caso de uso más común es correo HTML con imágenes insertadas. El HTML hace referencia a imágenes por Content-ID (URLs cid:):

Content-Type: multipart/related; boundary="----=_rel"

------=_rel
Content-Type: text/html; charset=utf-8

<p>Check out our logo:</p>
<img src="cid:logo@example.com" alt="Logo" />

------=_rel
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-ID: <logo@example.com>

iVBORw0KGgoAAAANSUhEU...

------=_rel--

multipart/digest — Colección de mensajes

Una variante de mezclado donde el tipo de contenido predeterminado para cada parte es message/rfc822 en lugar de text/plain. Utilizado por resúmenes de listas de correo. Raramente se ve en correo electrónico moderno.

Detalles técnicos clave

Anidar tipos multiparte

El verdadero poder de MIME proviene del anidamiento. Un correo de marketing típico con imágenes insertadas y un archivo adjunto se parece a esto:

; La estructura estándar para correo HTML con imágenes insertadas + archivos adjuntos

Content-Type: multipart/mixed           ← externo: cuerpo + archivos adjuntos
  |
  |-- multipart/alternative              ← cuerpo: texto o HTML
  |     |-- text/plain                    ← alternativa de texto plano
  |     |-- multipart/related             ← HTML + imágenes insertadas
  |           |-- text/html               ← el cuerpo HTML
  |           |-- image/png (cid:logo)    ← imagen insertada
  |
  |-- application/pdf (attachment)       ← archivo adjunto

Este anidamiento de tres niveles es el patrón estándar utilizado por prácticamente todas las bibliotecas de correo y proveedores de servicios de correo electrónico.

El tipo message/rfc822

Encapsula un mensaje de correo electrónico completo como parte del cuerpo. Se utiliza para reenviar mensajes como archivos adjuntos y en notificaciones de rechazo (RFC 3462 multipart/report). El mensaje encapsulado tiene sus propios encabezados (De, Para, Asunto, etc.) y cuerpo.

El respaldo application/octet-stream

Cuando el tipo de contenido de un archivo es desconocido, usa application/octet-stream. Esto le indica al cliente que lo trate como datos binarios genéricos y normalmente activa un mensaje de descarga. Es el equivalente de MIME de "No sé qué es esto; guárdalo y averigúalo tú mismo".

Requisitos de límites

La cadena de límite tiene reglas específicas:

Errores comunes

Impacto en la entrega

Related RFCs