Comment décoder un e-mail au format MIME

La plupart des e-mails envoyés aujourd'hui sont au format MIME (Multipupose Internet Mail Extensions). Cela permet d'envoyer des e-mails avec des versions en texte brut et en texte enrichi/HTML, des images en ligne et des pièces jointes. Des extensions MIME peuvent être ajoutées à un message au format RFC/822 standard afin d'obtenir une compatibilité descendante avec les anciens systèmes de messagerie.

Étape 1

Chargez le contenu du message électronique.

Vidéo du jour

Étape 2

Vérifiez l'en-tête « Type de contenu ». Si le type de contenu est multipart (c'est-à-dire "multipart/mixed", "multipart/alternative", etc.), le message aura plusieurs sections à analyser. Si le type de contenu est en plusieurs parties, continuez avec les étapes ci-dessous.

Étape 3

L'en-tête Content-Type doit contenir une chaîne unique utilisée par le code qui a généré le message MIME pour désigner les limites des parties MIME. Exemple:

Type de contenu: multipart/mixte; borne="part_c7161025_fe8a_45f4_83ef_6befcfa5d021"

La chaîne de limite dans ce cas est "part_c7161025_fe8a_45f4_83ef_6befcfa5d021".

Étape 4

Chaque partie MIME sera séparée par la chaîne de délimitation précédée de deux tirets ("--") sur une ligne vierge. Vous devrez parcourir le message ligne par ligne à la recherche des limites de la pièce. Tout le texte entre les limites sauf le CR/LF final fait partie de cette partie MIME.

Important: la dernière partie MIME se terminera par la chaîne de limite suivie de deux autres tirets.

Exemple:

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021 Première partie MIME.

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021 Deuxième partie MIME

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021 Dernière partie MIME.

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021--

Étape 5

Chaque partie MIME doit ensuite être analysée. Le format de chaque partie MIME est similaire au message formaté RFC/822 d'origine. Il contiendra une série d'en-têtes, suivis d'une ligne vide, puis les données du corps.

Étape 6

Une partie MIME peut elle-même être en plusieurs parties, avec son propre en-tête "Content-Type" et sa propre chaîne de limite. Votre code doit analyser récursivement les parties MIME jusqu'à ce qu'il atteigne les nœuds enfants.

Étape 7

Une partie MIME peut simplement être une pièce jointe binaire. Dans ce cas, un en-tête Filename sera généralement fourni, avec l'encodage de transfert. BASE64 est un type d'encodage populaire. Dans ce cas, tout le corps de la partie MIME doit être décodé en BASE64. À titre d'exemple, voici les premières lignes d'une image JPG jointe :

=NextPart_003_01C755EF.43F2628D Type de contenu: image/jpeg; name="testimage.jpg" Contenu-Transfer-Encodage: base64 Contenu-Description: testimage.jpg Contenu-Disposition: pièce jointe; nom de fichier="testimage.jpg"

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

Étape 8

Le corps HTML du message doit se trouver dans une section MIME avec ContentType: Text/Html, à l'intérieur d'une section ContentType: Multipart/Alternative MIME.

Étape 9

Le corps du texte en clair du message doit se trouver dans une section MIME avec ContentType: Text/plain, à l'intérieur d'une section ContentType: Multipart/Alternative MIME.

Choses dont vous aurez besoin

  • Connaissance d'un langage informatique (c'est-à-dire C++, C#, VB, etc.).

  • Connaissance de base du format d'un message électronique au format RFC/822.

Conseil

Consulter la RFC 822 http://www.ietf.org/rfc/rfc0822.txt? nombre=822 et RFC 1341 http://www.ietf.org/rfc/rfc1341.txt? nombre=1341 pour plus d'informations. Si vous codez en C#, une excellente bibliothèque gratuite est disponible sur http://www.codeproject.com/csharp/mime_project.asp.