Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Réseaux > Général > Lecture du tutoriel

Contenu d'un email

Avatar
Auteur : yoch
Créé : le 29/04/2008 09:10:49
Modifié : le 29/04/2008 11:34:22
Noter et commenter ce tutoriel
Imprimer ce tutoriel
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 :

Sommaire du chapitre :
Chapitre précédent Sommaire

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'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 ! :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 27 = 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 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 :
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'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é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 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...

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ç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.

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
Auteur : yoch
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 394 Zéros connectés | Requêtes SQL 9 requêtes | Temps de génération de la page : Total (SQL) 0.021s (0.0093s)