Aller au menu - Aller au contenu

Icône Contenu d'un email

Avatar
Par Avatar yoch
Mise à jour : 26/08/2008
1 479 visites depuis 7 jours, dont 51 sur ce chapitre classé 88/786
Nous allons maintenant analyser ensemble la structure interne d'un email, mais avant cela, une petite introduction s'impose :

Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Les encodages : une histoire de bits...

Les serveurs SMTP n'ont pas toujours été capables de transmettre tous les types de texte. A la base, ils n'ont été prévus que pour transmettre les caractères anglophones, ce qui est très limité !

Les codages de caractères



Citation : Wikipédia
Un codage de caractères est un code qui associe un jeu de caractères d'une langue naturelle (comme un alphabet) avec un jeu de quelque chose d'autre, comme des nombres ou des signaux électriques.


Je vais essayer de vous expliquer à ma façon : un ordinateur ne comprend à la base que le binaire, c'est à dire des suites de 0 et de 1...
Mais alors, avec les lettres, les chiffres, les symboles, le chinois..., comment fait-il ?

En réalité, le binaire reste derrière tout cela ! :p

Explication : prenons l'exemple de l'octet. Un octet est composé de 8 bits, c'est à dire d'une série de 8 chiffres en binaire.
Ce qui permet d'avoir 28 = 256 combinaisons !
Exemple : 00000000 => 0 ; 00000001 => 1 ; 00000010 => 2 ; 00000011 => 3 ; 01100100 => 100 ; 11111111 = 255.

A présent, nous pouvons convenir par exemple que :
01000001 (binaire) => 65 (décimal) => A ; 01000010 (binaire) => 66 (décimal) => B, etc.

C'est cela la notion d'encodage : décider que telle valeur est égale à tel caractère !

Le problème du codage ASCII



Table ASCII (cliquez pour agrandir)
Image utilisateur


Le codage ASCII date de 1961 et reste le plus répandu dans le monde de l'informatique. Internet ne fait pas exception à la règle...

Le problème est que le codage ASCII est vraiment très limité (7 bits, soit 26 = 128 combinaisons).
Ce codage donc, suffisant pour les caractères anglais, ne l'est plus du tout si l'on veut utiliser des caractères accentués, etc.

En conclusion, avec les anciens serveurs SMTP, seuls les caractères codés en ASCII pouvaient être transmis correctement.
Pour faire passer des messages plus diversifiés, il a fallu ruser un peu...
Les serveurs ESMTP, plus récents, possèdent une extension leur permettant de transmettre du texte en 8 bits.

Il fallait en fait encoder le texte dans un autre codage, permettant de passer les caractères complexes divers en ASCII (et non en binaire, vous suivez ?...), puis le décoder à l'arrivée.

Bon, allez, je vois que vous êtes perdus, je vous fais un petit schéma :
Image utilisateur


Plusieurs types d'encodages existent. Les plus utilisés pour le transfert de courrier sont le Quoted-Printable (7 bits) et le Base64 (6 bits).
Chaque partie du mail (texte, pièce jointe, etc.) peut être encodée différemment, selon le codage le plus adapté.

C'est tout ?

En réalité, il nous reste encore un problème !

Les différents systèmes d'exploitation (ainsi que les logiciels...) ne sont pas toujours d'accord sur l'encodage 8 bits à employer pour le texte. Il y a ainsi les codages ISO-8859-1, Windows-1252...

Et c'est pire si vous utilisez des caractères complexes, auquel cas vous utiliserez des codages exotiques comme le UTF-8 (européen), le Shift-JIS (japonais), ou le Big5 (chinois)...

Conclusion : il ne suffit plus d'encoder le texte différemment, il faut aussi retenir l'encodage de base utilisé pour que le texte puisse être décodé sans problème !

Mais alors comment faire avec tout ce bordel !?

Solution : Multipurpose Internet Mail Extension



Pour faire de l'ordre dans tout cela, a été créé le MIME.
Citation : Wikipédia
Multipurpose Internet Mail Extensions (MIME) est un standard internet qui étend le format de données des courriels pour supporter des textes en différents codages de caractères autres que l'ASCII, des contenus non textuels, des contenus multiples, et des informations d'en-tête en d'autres codages que l'ASCII.


Je crois que pour mieux appréhender le MIME, rien ne vaut la pratique !
Nous allons maintenant analyser un message avec une pièce jointe...

Décryptage d'un mail

Comme envoyer une pièce jointe avec telnet est quasiment impossible, nous allons envoyer une pièce jointe de façon classique, puis la récupérer avec telnet.

Pour des raisons de simplicité, nous allons envoyer une pièce jointe toute simple.
Lancez votre éditeur de texte, puis entrez-y la phrase :

Image utilisateur


Sauvegardez le fichier au format .txt, et enfin envoyez-le à votre adresse mail.

Nous allons maintenant récupérer ce courrier avec telnet.
On lance telnet, on se connecte au serveur POP3 sur le port 110, on s'identifie, puis on vérifie que le mail est bien arrivé, et enfin on le récupère avec la commande retr.

Voici ce que ça donne chez moi (sans les entêtes) :

Image utilisateur


Analysons !



MIME-Version: 1.0
Ici, la version MIME est donnée (je crois que vous vous en seriez doutés !).

Subject: =?ISO-8859-1?Q?pi=E8ce_jointe?=
Ici, le sujet de mon message("pièce jointe") a été encodé en Quoted-Printable, et doit être décodé selon le codage ISO-8859-1.

Content-type: multipart/mixed;
boundary="------------030306050100030400050709"

Ces deux lignes sont importantes! Elles signifient que le mail contient plusieurs parties, qui sont séparées par ------------030306050100030400050709.
Le MIME est toujours déclaré comme ceci : type/soustype, on parle de type MIME.

This is a multi-part message in MIME format.
Indique le début du message.

------------030306050100030400050709
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Corps du message. Comme je n'ai rien mis dans le corps du message, l'encodage est resté sur 7 bits, mais cela peut varier.

------------030306050100030400050709
Content-Type: text/plain;
name="texte.txt"

Le type MIME de la pièce jointe est donné, ainsi que son nom.
Le type varie selon la pièce que vous avez reçue, ce peut être aussi : image/jpeg, audio/x-ms-wma (Windows Media Audio), video/x-flv (vidéo Flash), etc.

Content-Transfert-Encoding: base64
Ce qui veut dire que le fichier a été encodé en base64, comme c'est généralement le cas.

Pour vous en assurer, allez sur cette page (http://www.paulschou.com/tools/xlate/), et encodez la phrase que nous avons envoyée en pièce jointe.

Vous pouvez constater que la pièce jointe a été encodée en base64.

Image utilisateur


Maintenant, imaginez-vous une image en base64 ! Et je ne vous parle pas de la longueur... :p
Voilà pourquoi il n'est pas très facile d'envoyer une pièce jointe avec telnet. :lol:
Chapitre précédent Sommaire Chapitre suivant

Partager

1 commentaire pour "Contenu d'un email"
Note moyenne : 3.75 / 4 (20 votes)
Pseudo Commentaire
Hors ligne calavala # Posté le 24/12/2009 à 14:55:46

"Ce qui permet d'avoir 2puissance7 = 256 combinaisons !"
Non, c'est 2 puissance 8 qui fait 256 combinaisons.
Plus loin, 2 puissance 7 = 128 ( et non 64)
Se rappeler que 2 puissance 0 = 1 et que 2 puissance 1 = 2.
Il y a 128 codes ascii, car il y avait un bit de parité pour faire un octet.
Bravo pour le site !

Voir tous les commentaires