Come decodificare un'e-mail in formato MIME
La maggior parte delle email inviate oggi sono formattate MIME (Multipupose Internet Mail Extensions). Ciò consente di inviare e-mail con versioni di testo normale e RTF/HTML, immagini inline e allegati. Le estensioni MIME possono essere aggiunte a un messaggio nel formato standard RFC/822 in modo da ottenere la compatibilità con le versioni precedenti con i vecchi sistemi di posta.
Passaggio 1
Carica il contenuto del messaggio di posta elettronica.
Passaggio 2
Controlla l'intestazione "Tipo di contenuto". Se il tipo di contenuto è multiparte (ad esempio "multiparte/misti", "multiparte/alternativo", ecc.) il messaggio avrà più sezioni da analizzare. Se il tipo di contenuto è multiparte, continua con i passaggi seguenti.
Passaggio 3
L'intestazione Content-Type deve contenere una stringa univoca utilizzata dal codice che ha generato il messaggio MIME per designare i limiti delle parti MIME. Esempio:
Tipo di contenuto:multiparte/misto; confine="part_c7161025_fe8a_45f4_83ef_6befcfa5d021"
La stringa limite in questo caso è "part_c7161025_fe8a_45f4_83ef_6befcfa5d021".
Passaggio 4
Ciascuna parte MIME sarà separata dalla stringa limite preceduta da due trattini ("--") su una riga vuota. Sarà necessario scansionare il messaggio riga per riga cercando i contorni 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 limite 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 multiparte, con la propria intestazione "Content-Type" e la propria stringa limite. Il codice deve analizzare ricorsivamente le parti MIME finché non raggiunge i nodi figlio.
Passaggio 7
Una parte MIME può essere semplicemente un allegato binario. In questo caso viene solitamente fornita un'intestazione Filename, insieme alla codifica del trasferimento. BASE64 è un tipo di codifica popolare. In questo caso l'intero corpo della parte MIME deve essere decodificato BASE64. Ad esempio, ecco le prime righe di un'immagine JPG allegata:
------= NextPart_003_01C755EF.43F2628D Tipo di contenuto:image/jpeg; name="testimage.jpg" Content-Transfer-Encoding:base64 Content-Description:testimage.jpg Content-Disposition:attachment; nomefile="testimage.jpg"
/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAQABQQDASIA 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 chiaro deve trovarsi in una sezione MIME con ContentType:Text/plain, all'interno di una sezione ContentType:Multipart/MIME alternativo.
Suggerimento
Consultare RFC 822 http://www.ietf.org/rfc/rfc0822.txt?number=822 e RFC 1341 http://www.ietf.org/rfc/rfc1341.txt?number=1341 per ulteriori informazioni. Se stai codificando in C#, un'eccellente libreria gratuita è disponibile all'indirizzo http://www.codeproject.com/csharp/mime_project.asp.