Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Nous allons maintenant analyser ensemble la structure interne d'un email, mais avant cela, une petite introduction s'impose :
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édiaUn 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'autres, comme par exemple 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 !
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 2
7 =
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)

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 2
6 =
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 passez 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 :
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'exploitations (ainsi que les logiciels...) ne sont pas toujours d'accord sur l'encodages 8 bits a 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édiaMultipurpose Internet Mail Extensions (MIME) est un standard internet qui étend le format de données des courriels pour supporter des textes en différents codage 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...
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 :
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) :
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çus, 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.