Come decodificare un'e-mail in formato MIME

La maggior parte delle email inviate oggi è in formato MIME (Multipupose Internet Mail Extensions). Ciò consente di inviare e-mail con versioni di testo normale e RTF/HTML, immagini in linea e allegati. Le estensioni MIME possono essere aggiunte a un messaggio nel formato standard RFC/822 in modo da ottenere la compatibilità con i vecchi sistemi di posta.

Passo 1

Carica il contenuto del messaggio di posta elettronica.

Video del giorno

Passo 2

Controlla l'intestazione "Tipo di contenuto". Se il tipo di contenuto è multiparte (es. "multiparte/misto", "multiparte/alternativa", ecc.) il messaggio avrà più sezioni da analizzare. Se il tipo di contenuto è multiparte, continuare con i passaggi seguenti.

Passaggio 3

L'intestazione Content-Type dovrebbe contenere una stringa univoca utilizzata dal codice che ha generato il messaggio MIME per designare i limiti della parte MIME. Esempio:

Tipo di contenuto: multiparte/misto; confine="part_c7161025_fe8a_45f4_83ef_6befcfa5d021"

La stringa di delimitazione in questo caso è "part_c7161025_fe8a_45f4_83ef_6befcfa5d021".

Passaggio 4

Ogni parte MIME sarà separata dalla stringa di delimitazione preceduta da due trattini ("--") su una riga vuota. Sarà necessario scansionare il messaggio riga per riga cercando i limiti della parte. Tutto il testo tra i confini tranne il CR/LF finale fa parte di quella parte MIME.

Importante: l'ultima parte MIME terminerà con la stringa di delimitazione seguita da altri due trattini.

Esempio:

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021 Prima parte MIME.

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021 Seconda parte MIME

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021 Ultima parte MIME.

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021--

Passaggio 5

Ogni parte MIME deve quindi essere analizzata. Il formato di ciascuna parte MIME è simile al messaggio formattato RFC/822 originale. Conterrà una serie di intestazioni, seguite da una riga vuota, quindi i dati del corpo.

Passaggio 6

Una parte MIME può essere essa stessa multipart, con la propria intestazione "Content-Type" e la propria stringa di confine. Il tuo codice deve analizzare in modo ricorsivo le parti MIME finché non raggiunge i nodi figlio.

Passaggio 7

Una parte MIME può essere semplicemente un allegato binario. In questo caso di solito viene fornita un'intestazione del nome del file, insieme alla codifica di trasferimento. BASE64 è un tipo di codifica popolare. In questo caso l'intero corpo della parte MIME deve essere decodificato in BASE64. Ad esempio, ecco le prime righe di un'immagine JPG allegata:

=NextPart_003_01C755EF.43F2628D Content-Type: image/jpeg; name="testimage.jpg" Content-Transfer-Encoding: base64 Content-Description: testimage.jpg Content-Disposition: attachment; nomefile="testimage.jpg"

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

Passaggio 8

Il corpo HTML del messaggio dovrebbe trovarsi in una sezione MIME con ContentType: Text/Html, all'interno di una sezione ContentType: Multipart/Alternative MIME.

Passaggio 9

Il corpo del messaggio in testo normale dovrebbe trovarsi in una sezione MIME con ContentType: Text/plain, all'interno di una sezione ContentType: Multipart/Alternative MIME.

Cose di cui avrai bisogno

  • Conoscenza di un linguaggio informatico (es. C++, C#, VB, ecc.).

  • Conoscenza di base del formato di un messaggio di posta elettronica formattato RFC/822.

Consiglio

Consulta RFC 822 http://www.ietf.org/rfc/rfc0822.txt? numero=822 e RFC 1341 http://www.ietf.org/rfc/rfc1341.txt? numero=1341 per maggiori informazioni. Se stai programmando in C#, un'eccellente libreria gratuita è disponibile su http://www.codeproject.com/csharp/mime_project.asp.