Cómo decodificar un correo electrónico en formato MIME

La mayoría de los correos electrónicos que se envían hoy en día tienen formato MIME (Extensiones de correo de Internet multipropósito). Esto permite enviar correos electrónicos con versiones de texto sin formato y texto enriquecido/HTML, imágenes en línea y archivos adjuntos. Las extensiones MIME se pueden agregar a un mensaje en formato RFC/822 estándar para lograr la compatibilidad con los sistemas de correo más antiguos.

Paso 1

Cargue el contenido del mensaje de correo electrónico.

Paso 2

Verifique el encabezado "Tipo de contenido". Si el tipo de contenido es multiparte (es decir, "multiparte/mixto", "multiparte/alternativo", etc.), el mensaje tendrá varias secciones para analizar. Si el tipo de contenido es de varias partes, continúe con los pasos a continuación.

Paso 3

El encabezado Content-Type debe contener una cadena única utilizada por el código que generó el mensaje MIME para designar los límites de la parte MIME. Ejemplo:

Tipo de contenido:multiparte/mixto; límite="part_c7161025_fe8a_45f4_83ef_6befcfa5d021"

La cadena límite en este caso es "part_c7161025_fe8a_45f4_83ef_6befcfa5d021".

Paso 4

Cada parte MIME estará separada por la cadena de límite precedida por dos guiones ("--") en una línea en blanco. Deberá escanear el mensaje línea por línea buscando los límites de las partes. Todo el texto entre los límites excepto el CR/LF final es parte de esa parte MIME.

Importante:la última parte MIME terminará con la cadena de límite seguida de dos guiones más.

Ejemplo:

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021 Primera parte MIME.

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021 Segunda parte MIME

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021 Última parte MIME.

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021--

Paso 5

Cada parte MIME necesita entonces ser analizada. El formato de cada parte MIME es similar al mensaje original con formato RFC/822. Contendrá una serie de encabezados, seguidos de una línea en blanco y luego los datos del cuerpo.

Paso 6

Una parte MIME puede ser en sí misma multiparte, con su propio encabezado "Content-Type" y cadena de límite. Su código debe analizar recursivamente las partes MIME hasta que llegue a los nodos secundarios.

Paso 7

Una parte MIME puede ser simplemente un archivo adjunto binario. En este caso, normalmente se proporcionará un encabezado de nombre de archivo, junto con la codificación de transferencia. BASE64 es un tipo de codificación popular. En este caso, todo el cuerpo de la parte MIME debe decodificarse en BASE64. Como ejemplo, aquí están las primeras líneas de una imagen JPG adjunta:

------= NextPart_003_01C755EF.43F2628D Tipo de contenido:imagen/jpeg; name="testimage.jpg" Contenido-Transferencia-Codificación:base64 Contenido-Descripción:testimage.jpg Contenido-Disposición:archivo adjunto; nombre de archivo="imagen de prueba.jpg"

/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAQABQQDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA

Paso 8

El cuerpo HTML del mensaje debe estar en una sección MIME con ContentType:Text/Html, dentro de una sección ContentType:Multipart/Alternative MIME.

Paso 9

El cuerpo de texto sin formato del mensaje debe estar en una sección MIME con ContentType:Text/plain, dentro de una sección ContentType:Multipart/Alternative MIME.

Consejo

Consulte RFC 822 http://www.ietf.org/rfc/rfc0822.txt?number=822 y RFC 1341 http://www.ietf.org/rfc/rfc1341.txt?number=1341 para obtener más información. Si está programando en C#, hay disponible una excelente biblioteca gratuita en http://www.codeproject.com/csharp/mime_project.asp.