Una pequeña introducción sobre qué son los MIME types, más que nada para aclarar conceptos.
El protocolo más extendido para el envío de correos por internet es smtp. Este protocolo sólo admite el envio de caracteres de texto y además usando sólo 7 bits. Esto hace que sólo pueda enviarse un conjunto muy limitado de caracteres de texto (128), y no pueden enviarse caracteres con acentos, eñes, etc. Tampoco permite el envio de imágenes, música, etc.
Para intentar solucionar este problema, se hizo una pequeña extensión, conocida como MIME (Multipurpose Internet Mail Extensions). La idea básica consiste en convertir cualquier cosa que se quiera mandar a una ristra de caracteres de 7 bits, como los que acepta el protocolo smtp. Si tanto el que envía como el que recibe están de acuerdo en como convertir y desconvertir esos caracteres de 7 bits a la imagen, música, texto con acentos o lo que sea, se podría enviar cualquier cosa en un correo de texto.
Cuando usamos esta extensión MIME para enviar correos con imágenes, lo primero que se hace, usando caracteres de 7 bits, es enviar una pequeña cabecera. Esta cabecera le indica al que lo recibe qué es lo que está recibiendo y cómo debe tratarlo.
En primer lugar, se envía la versión de MIME que se está empleando, algo como esto
MIME-Version: 1.0
Luego, qué tipo de información es la que se va a enviar. Los posibles tipos estan definidos (ver enlace al final) y no se puede poner cualquier cosa. Por ejemplo, para enviar una foto jpeg se pondría
Content-type: image/jpeg
Finalmente, hay que indicar cual es el mecanismo para convertir o desconvertir esa imagen jpeg a un conjunto de caracteres de 7 bits. Actualmente hay servidores de correo con protocolo smtp extendido que admiten caracteres de más de 7 bits, por lo que hay más métodos de conversión disponibles. Pero los compatibles con 7 bits son
Son simplemente la forma de convertir una ristra de bytes arbitrarios (una foto, una música, un video) a una ristra de caracteres de 7 bits, susceptible de ser enviada por correo con el protocolo smtp.
Esto sería lo que aparecería en la cabecera MIME
Content-Transfer-Encoding: 7bit
Un ejemplo completo. Si queremos enviar un correo cuyo asunto es "Camión" y el texto es "Acentos áéíóó y otros Ñ ñ ü", el texto con caracteres de 7 bits que se enviaría al servidor smtp sería
From: yo@yo.com
To: chuidiang@gmail.com
Message-ID: <12097592.01175854969750.JavaMail.Administrador@trasto2>
Subject: =?Cp1252?Q?Cami=F3n?=
MIME-Version: 1.0
Content-Type: text/plain; charset=Cp1252
Content-Transfer-Encoding: quoted-printable
Acentos =E1=E9=ED=F3=F3 y otros =D1 =F1 =FC
.
Puedes ver en las tres primeras líneas algunos datos sobre el correo (from, tu y Message-ID). Esto no tiene que ver con los tipos MIME, es la forma en el protocolo smtp de indicar algunos datos del correo.
La siguiente línea es el subject, que como ves se ha convertido a caracteres normales, quitando el acento de camión y reemplazándolo por =F3. Puesto que esto va delante de la cabecera MIME, lleva su conversión por defecto, decidida por el cliente de correo que he usado para obtener esto.
Luego a lo que vamos, las tres líneas con la cabecera MIME, indicando versión, tipo de texto con el juego de caracteres Cp1215 empleado en el original y el tipo de conversión que se va a hacer (quoted-printable)
Finalmente el mensaje, en el que se han reemplazado todos los acentos y caracteres extraños por caracteres normales. El punto de la última línea es del protocolo smtp para indicar que se ha llegado al final de mensaje.