>> Technologie Électronique >  >> Maison intelligente >> Vie connectée

Comment décoder un e-mail au format MIME

La plupart des e-mails actuels sont au format MIME (Multipurpose Internet Mail Extensions). Cela permet d'envoyer du texte brut et du texte enrichi/HTML, des images intégrées et des pièces jointes. Les extensions MIME peuvent être ajoutées à un message au format RFC/822 standard pour assurer la compatibilité ascendante avec les anciens systèmes de messagerie.

Étape 1

Chargez le contenu du message e-mail.

Étape 2

Vérifiez l'en-tête Content-Type. Si le type est multipart (ex. : multipart/mixed, multipart/alternative), le message contient plusieurs sections à analyser. Si c'est le cas, continuez.

Étape 3

L'en-tête Content-Type doit contenir une chaîne unique utilisée par le générateur MIME pour délimiter les parties. Exemple :

Content-Type: multipart/mixed; boundary="part_c7161025_fe8a_45f4_83ef_6befcfa5d021"

La chaîne de délimitation (boundary) est ici part_c7161025_fe8a_45f4_83ef_6befcfa5d021.

Étape 4

Chaque partie MIME est séparée par la chaîne de délimitation précédée de deux tirets (--) sur une ligne vide. Analysez le message ligne par ligne pour trouver ces bornes. Tout le texte entre les bornes sauf le dernier CR/LF appartient à cette partie MIME.

Important : La dernière partie MIME se termine par la chaîne de délimitation suivie de deux tirets supplémentaires.

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 être analysée. Son format ressemble au message RFC/822 original : une série d'en-têtes, une ligne vide, puis les données du corps.

Étape 6

Une partie MIME peut elle-même être multipart, avec son propre en-tête Content-Type et sa propre chaîne de délimitation. Votre code doit analyser récursivement les parties MIME jusqu'aux nœuds enfants.

Étape 7

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

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

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

Étape 8

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

Étape 9

Le corps en texte brut doit se trouver dans une section MIME avec Content-Type: Text/plain, à l'intérieur d'une section Content-Type: Multipart/Alternative.

Astuce

Consultez la RFC 822 et la RFC 1341 pour plus d'informations. En C#, une excellente bibliothèque gratuite est disponible sur CodeProject.

Vie connectée