Les bases

Dans cette partie de l'exposé, nous allons voir en détail ce que tout internaute gagnerait à savoir, concernant la façon dont les e-mails voyagent, Quel est leur contenu exact, comment les informations sont codées…

Cette partie est donc divisée en trois paragraphes :

  • la façon dont le message voyage, depuis l'émetteur jusqu'au destinataire ;
  • une analyse détaillée de tout le contenu du message, y compris l'en-tête qui n'est pas visible par défaut dans les outils de messagerie courants ;
  • une explication de la façon dont le contenu du message est codé pour pouvoir être transporté par SMTP.

Itinéraire d'un message électronique

Supposons un cas simple (et cependant courant).

  • Soit un utilisateur abonné chez « truc » et ayant pour adresse électronique : fred@truc.fr.
  • Soit un autre utilisateur abonné chez « machin » et ayant pour adresse électronique marc@machin.com.
  • truc dispose des serveurs :
    • smtp.truc.fr
    • pop.truc.fr
  • machin dispose des serveurs :
    • smtp.machin.com
    • pop.machin.com
  • Fred doit envoyer un message à Marc.

Itinéraire d'un message

  1. Fred compose le message avec son outil de messagerie préféré, disons outlook express. Il a des avantages: Il est gratuit et il est fait par Microsoft.
    Une fois le message composé, Fred clique sur le bouton « envoyer » de son MUA (comme Mail User Agent). Comme il a correctement configuré son outil, le message est envoyé sur le serveur smtp.truc.fr (MTA, comme Mail Transfert Agent).
  2. Le serveur smtp.truc.fr reçoit le message, constate que le destinataire n'est pas dans son domaine (sa destination). Il cherche alors un MTA dans le domaine machin.com et le trouve (DNS est là pour ça, entre autres choses). Il envoie le message à smtp.machin.com.
  3. Le serveur smtp.machin.com reçoit le message, constate que le destinataire est bien dans son domaine (ses destinations). Il range alors le message dans la boite aux lettres de Marc, par l'intermédiaire d'un composant appelé MDA, comme Mail Delivery Agent. Il y restera aussi longtemps qu'il le faudra, sans rien dire à personne.
  4. Un jour, Marc décide de regarder s'il n'a pas de messages. Il envoie donc une requête à son serveur pop.machin.com, au moyen de son outil de messagerie préféré, par exemple « Thunderbird » (un autre MUA). Il a des avantages: il est libre, gratuit et n'est pas fait par Microsoft.
  5. Le serveur pop consulte la boite aux lettres de Marc, constate qu'il y a un message dedans.
  6. Il l'envoie alors à l'outil de messagerie de Marc qui, par défaut, demandera à pop.machin.com de le supprimer de la boite aux lettres. Nous supposons ici que Marc, ou plutôt son MDA, utilise le protocole POP3. Mais c'est un comportement par défaut, il est possible de demander à ne pas effacer les messages (même avec POP3). Cette fonction est utile lorsque l'on désire consulter sa messagerie de divers endroits sans avoir à se renvoyer un message si on veut le relire ailleurs.

POP3 est un protocole de relève de courrier. Sans entrer ici dans les détails, il en existe un autre appelé IMAP. D'ailleurs, tout ceci est étudié dans d'autres chapitres de ce site.

Mécanismes mis en jeu

SMTP (Simple Message Transfert Protocol)

C'est le protocole applicatif qui permet de transporter les messages sur l'Internet. Il sait acheminer un message jusqu'à une boîte aux lettres, mais ne va pas plus loin.

Pour y arriver, il analyse dans un premier temps la partie de l'adresse située à droite du @ (à prononcer dans ce cas « at »), pour trouver le domaine du destinataire. Si ce domaine le concerne, il cherche alors la boîte aux lettres du destinataire en regardant la partie de l'adresse située à gauche du @. Si le domaine du destinataire ne le concerne pas, il va chercher le serveur SMTP qui gère ce domaine, au moyen des champs MX du DNS du domaine destinataire et transmet le message à ce serveur.

POP3 (Post Office Protocol 3)

Ce protocole est exclusivement utilisé pour le dialogue entre le client de messagerie et la boîte aux lettres. Il ne fait pas de transport sur l'Internet, il permet juste à l'utilisateur de gérer son courrier. IMAP4 (Internet (ou Interactive ?) Mail (ou Message ?) Access Protocol version 4) en est une alternative.

MUA, MTA, MDA et cetera

Un peu de jargon :

  • Le MUA (Mail User Agent), c'est le client de messagerie (Thunderbird, Outlook Express, Eudora, Pegasus etc.).
  • Le MTA (Mail Transfert Agent) est à prendre au sens large. Le courrier peut être acheminé d'un point à un autre par l'intermédiaire d'agents de transfert qui ne gèrent pas de boites aux lettres, mais savent relayer le courrier d'un point à un autre pour atteindre le serveur supportant les boites aux lettres. En effet, l'exemple vu plus haut est le plus simple que l'on puisse imaginer. Dans la pratique, le courrier peut transiter par plusieurs MTA. Nous le verrons plus loin.
  • Le MDA (Mail Delivery Agent) aussi appelé LDA (Local Delivery Agent) est le service de remise du courrier dans les boites aux lettres des destinataires, une fois que le courrier est arrivé sur le MTA de destination. Le MTA transmet alors au MDA les messages destinés aux clients du domaine.
  • le MX (Mail eXchanger), n'est rien de plus qu'un MTA référencé sur les DNS, comme nous le verrons plus loin.

Récapitulons

Lorsque l'on rédige un courrier et qu'on le poste, on le fait avec le MUA qui le transmet au MTA qu'on lui a signalé dans la configuration (pour un abonné Free, c'est normalement smtp.free.fr). C'est l'étape 1 du petit schéma vu plus haut.

De MTA en MTA, le message voyage jusque sur le MTA qui a en charge la messagerie du domaine du destinataire (étape 2). Il le passe alors (avec tous les autres messages entrant pour ce domaine) au MDA qui distribue ce courrier entrant dans les boites aux lettres concernées (étape 3).

Les étapes 4, 5 et 6 concernent le serveur POP (ou IMAP).

Dans les entrailles de l'e-mail

D'abord, en français on ne dit pas « e-mail », ni « mail »; on dit « mèl » (je t'envoie un mèl, tu m'envoies un mèl, on s'envoie des mèls), on peut dire également « courriel ». Mais, pour la bonne compréhension du texte, je continuerai à écrire « e-mail ».

Lorsque vous recevez un e-mail, votre MUA (maintenant qu'on sait ce que c'est) vous montre:

  • L'expéditeur.
  • L'Objet (qu'il ne faut jamais oublier de remplir, c'est utile pour trier son courrier).
  • Le texte (ou corps) du message.

Mais votre e-mail contient toute une partie « cachée » qui nous permet de savoir quel chemin cet e-mail a suivi pour arriver dans votre boîte aux lettres.

Cette partie, appelée l'en-tête, n'est pas « top secret », bien que non visible par défaut. Vous pouvez toujours la consulter avec votre MUA. Pour Thunderbird, menu « Affichage/code source du message ». Pour Outlook Express, il y a longtemps que j'ai oublié.

Prenons un exemple


Return-Path: <christian.caleca@wxnxdoo.fr>
Received: from alisier.wxnxdoo.fr (smtp-rt-9.wxnxdoo.fr [193.252.19.55])
          by mail.monaco.net (Pro-8.9.3/Pro-8.9.3) with ESMTP id SAA07439
for <eme13@enprovence.com>; Thu, 11 May 2000 18:20:10 +0200
Received: from mahonia.wxnxdoo.fr (193.252.19.58)
          by alisier.wxnxdoo.fr; 11 May 2000 18:20:08 +0200
Received: from CHRIS (62.161.101.240)
          by mahonia.wxnxdoo.fr; 11 May 2000 18:19:51 +0200
Message-ID: <000501bfbb64$afc796c0$0a00a8c0@maison.mrs>
From: "Christian CALECA" <christian.caleca@wxnxdoo.fr>
To: <eme13@enprovence.com>
Subject: test itineraire
Date: Thu, 11 May 2000 18:19:24 +0200
MIME-Version: 1.0
Content-Type: text/plain;
charset= "iso-8859-1"
Content-Transfer-Encoding: 8bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2919.6600
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6600
Status:


Juste pour analyser l'en-tête

Toute la partie en gras constitue ce que l'on appelle l'en-tête, alors que la dernière ligne, le message lui-même, s'appelle le corps.

Note :
Pour éviter de faire la partie trop belle aux robots renifleurs d'adresses e-mails, certains noms de domaines ont été volontairement dégradés.

Détail de l'en-tête

Tous les mots finis par « : » sont des champs qui ont une signification particulière, soit pour les MTA, soit pour les MUA. Nous allons détailler leur signification.

Return-Path: C'est l'adresse qui sera utilisée:
* Pour la réponse (la fonction répondre à l'expéditeur)
* Le renvoi du message s'il ne peut arriver au destinataire.
Received: Cette ligne est un peu particulière. Chaque MTA qui reçoit le message y incrit le nom du MTA qui le lui a envoyé, ainsi que le sien. Il est ainsi possible de retracer complètement la route qu'a suivi le message de l'expéditeur jusqu'au destinataire.
Message-ID: C'est un identifiant unique du message. Il est attribué par le premier MTA qui reçoit le message (Protocole ESMTP: Extended SMTP).
From: C'est l'adresse de l'expéditeur. Elle est par défaut recopiée dans le « return path », sauf configuration différente du MUA de l'expéditeur.
To: C'est l'adresse du (ou des) destinataire(s)
Subject: L'objet du message
Date: La date d'émission écrite par le MUA de l'émetteur
MIME-Version: Version du mode de codage des données. Cette information a tellement d'importance que nous allons y consacrer toute une page.
Content-Type: Type de codage utilisé.
charset= Jeu de caractères utilisé.
Content-Transfer-Encoding: Codage sur 7 ou 8 bits.
X-… Tous les champs commençant par X ne sont pas des champs « officiels ». CHaque MUA est libre d'en ajouter autant qu'il veut. Leur contenu n'est pas pris en compte par les MTA. Ainsi, il est illusoire de croire que le champ X-Priority ait une quelconque importance dans la vitesse de transport du message.

Cette liste de champs n'est pas complète. Il y en aurait pour  trois pages à les énoncer tous… 

Utilité de l'en-tête

L'en-tête contient donc toutes les informations nécessaires pour:

  • Identifier l'auteur du message 
  • Identifier le destinataire
  • Savoir à qui il faut répondre
  • Retrouver le chemin suivi par le message
  • Savoir comment a été codé ce message.
  • Des informations « subsidiaires » (champs X…) qui ne sont pas utilisés par SMTP ni ESMPT, mais qui permettent de donner des informations qui peuvent être utiles, comme le MUA qui a généré le message.

Vertus et défauts de SMTP

Ce protocole a la vertu d'être particulièrement « solide », mais il est un peu ancien et il lui manque quelques fonctionnalités qui seraient bien utiles aujourd'hui :

  • la sécurisation de la transmission. Encore qu'une extension « STARTTLS » ait été créée dans ce but (voir à ce propos le site « Sécurisation des courriers électroniques ») ;
  • les possibilités de transmettre autre chose que du texte brut.

Ces deux limites peuvent être contournées :

  • en chiffrant son message ;
  • en utilisant un artifice pour encoder tout type de document de telle manière que SMTP croie que c'est du texte. Etudier ce système ici nous mènerait trop loin. Si le sujet vous intéresse, consultez le chapitre sur le codage des caractères.

Nous allons tout de même faire deux où trois observations utiles, pour comprendre mieux comment il faut configurer son MUA pour être lu correctement.

Les divers codages utilisant MIME

Bien que le codage des données soit traité plus en détail ailleurs sur ce site, voyons tout de même rapidement quelques points importants.

Pour illustrer ceci, nous allons envoyer des messages avec Outlook Express et nous allons les lire avec un outil rustique sous Linux : l'outil « mail ». Cet outil fonctionne en mode texte. Plus rustique, vous n'aurez que Telnet.

Nota :
Les captures ne datent pas d'hier et elles utilisent Outlook Express qui n'est pas recommandable, mais qui permet de mener à bien la manip.

Codage « Aucun » ou « plain/text »

C'est-à-dire pas de codage particulier pour le texte. On envoie ce message :

Et l'on récupère ceci (à la condition que votre console utilise ISO-8859-1):

C'est correct. L'en-tête indique que le contenu est du texte de type « plain text » encodé sur 8 bits, avec un jeu de caractères « ISO-8859-1 ». Comme vous pouvez le constater, le texte est parfaitement lisible. Il y a cependant un problème potentiel en voie de disparition: La plupart des MTA utilisent un protocole ESMTP qui gère l'ASCII sur 8 bits, mais il peut encore exister çà et là des vieux MTA qui mettront systématiquement le bit7 à 0. Le problème devrait aujourd'hui être rarissime. Dans ce cas, la seule solution est d'utiliser des caractères du code ASCII US, sans aucune lettre accentuée.

Codage: « quoted printable »

Outlook express propose ce mode en « texte brut ». Essayons pour voir…

Ben c'est pas terrible; les lettres accentuées sont curieusement codées…

En fait, dans ce mode de codage,  les caractères qui peuvent être codés sur 7 bits sont transmis normalement, ceux qui ne le peuvent pas (bit 7 à 1) sont remplacés par « = » et la valeur du code ASCII sur 8 bits exprimé en hexadécimal.

A ne pas utiliser donc, si le destinataire ne dispose pas d'outil sachant décoder du « quoted printable ». Aujourd'hui, (20 juin 2008) cette façon de faire semble être à la mode sur la configuration par défaut de nombreux MUA. J'avoue ne pas en connaitre ni en comprendre la raison.

Codage « base 64 »

Outlook Express propose également ce mode de codage, lorsque l'on choisit le « texte brut ». On essaye…

C'est catastrophique. Mail ne sait pas du tout décoder le message…

Aucun caractère n'est lisible.

Le codage HTML

Enfin, le meilleur pour la fin, le message en HTML.

Je ne voudrais pas ici déclencher une polémique inextinguible sur ce sujet brûlant… Mais rappelons les faits.

Le texte pur, c'est bien, mais c'est de la génération de « edit », « notepad » et autres « vi ». Autrement dit, aucun enrichissement possible du texte. Il peut pourtant être utile de rédiger ses messages avec quelques possibilités des traitements de texte, comme les notions de gras, italique, souligné, mise en sur brillance etc. D'où l'idée d'écrire ses messages en HTML qui sait faire tout cela.

Mais voyons le résultat :

Ici, pas de copie d'écran, tellement le résultat est long:

  • Ce qui est en gras constitue les morceaux de l'en-tête.
  • Ce qui est surligné représente les spécificités du codage en HTML « multipart »
  • Ce qui est en bleu, c'est l'explication de ce qu'il se passe. (Ca ne fait pas partie du message).

From christian.caleca@w-n-doo.fr  Thu May 11 09:00:46 2000
Return-Path: <christian.caleca@w-n-doo.fr>
Delivered-To: chris@gateway2.maison.mrs
Received: from chris (chris.maison.mrs [192.168.0.10])
	by gateway2.maison.mrs (Postfix) with SMTP id DB2D51BAAF
	for <chris@gateway2.maison.mrs>; Thu, 11 May 2000 09:00:46 +0200 (CEST)
Message-ID: <003501bfbb16$8a226dd0$0a00a8c0@maison.mrs>
From: "Christian CALECA" <christian.caleca@w-n-doo.fr>
To: <chris@gateway2.maison.mrs>
Subject: codage HTML
Date: Thu, 11 May 2000 09:00:06 +0200
MIME-Version: 1.0
Content-Type: multipart/alternative;

# L'extension MIME indique ici que le message va être codé en deux parties,
# de manière différente pour les deux parties...

	boundary="----=_NextPart_000_0031_01BFBB27.4D9A74F0"

# Avec une balise que l'on aura du mal à confondre
# avec le texte du message, quel qu'il soit.

X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2919.6600
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6600

# C'est un message de format MIME en plusieurs parties.

------=_NextPart_000_0031_01BFBB27.4D9A74F0  # Première balise
Content-Type: text/plain;
	charset= »iso-8859-1 »
Content-Transfer-Encoding: 8bit

Ici, c'est ce qu'on fait de mieux:
éèàçùî

# Cette première partie a été codée  de façon basique,
# celle qui, normalement, doit fonctioner avec n'importe quel MUA, nous l'avons vu.

------=_NextPart_000_0031_01BFBB27.4D9A74F0  # Deuxième balise
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

# Mais "quoted-printable", ce n'est pas forcément un bon choix...
# Le « plain text » peut être utilisé dans le codage HTML

<!DOCTYPE HTML PUBLIC « -//W3C//DTD HTML 4.0 Transitional//EN »>
<HTML><HEAD>
<META content=3D »text/html; charset=3Diso-8859-1" =
http-equiv=3DContent-Type>
<META content=3D »MSHTML 5.00.2919.6307 » name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Ici, c'est ce qu'on fait de =
mieux:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>=E9=E8=E0=E7=F9=EE</FONT></DIV>
<DIV>&nbsp;</DIV></BODY></HTML>


# Tout ceci est du jargon HTML. Simple ici, parce qu'il n'y a aucune fioriture !
# Ce paragraphe aurait été beaucoup plus long, si l'on avait mis des couleurs,
# des tailles de polices différentes, et surtout un fond de papier.
# Notez que la seule partie signifiante de tout ceci est ce qui est surligné en blanc


------=_NextPart_000_0031_01BFBB27.4D9A74F0--   # Dernière balise.

Notez qu'Outlook Express, malgré tout le mal que l'on peut en dire ici où là , a la politesse de créer un paragraphe en « plain text » qui sera lisible par tout MUA. D'autres MUA n'ont même pas cette politesse.

Alors, pourquoi le HTML est-il proscrit par la netiquette ?

  • en tout premier lieu, hélas, un problème de sécurité. Un document HTML peut véhiculer des scripts malicieux ayant des comportements de virus ;
  • l'extrême longueur des messages générés, surtout si l'on s'amuse un peu trop avec les gadgets. Ce gonflement de la taille du message est souvent pénalisant :
    • pour l'espace disque de celui qu conserve les messages qu'il reçoit ;
    • la durée de chargement (pensez qu'il existe encore des internautes qui ne disposent que d'un très faible débit) ;
  • La lisibilité aussi. La taille des polices étant fixée, un texte lisible sur un écran 800×600 deviendra très pénible à lire sur un 1280×1024 ;
  • la plus élémentaire des politesses qui consiste à s'assurer que l'on ne dérange pas celui à qui l'on envoie ce message. Les dérangements les plus évidents étant :
    • L'impossibilité pour le destinataire de lire correctement le message, n'étant pas outillé pour çà (mais là, à la rigueur, il peut éventuellement faire l'effort d'utiliser des outils qui savent le faire, la politesse passe aussi par là…) ;
    • Le temps de chargement des messages et l'encombrement de la boite aux lettres. C'est un argument qui me parait plus convaincant. Si vous êtes en déplacement, que vous vous connectez avec un portable sur une ligne RTC de qualité douteuse, vous préférerez assurément que les messages soient le plus court possible ;
    • certaines personnes reçoivent plusieurs dizaines (centaines) de messages par jour. Même avec une bonne connexion, c'est mieux de faire court ;
    • Le dernier argument est une synthèse des autres, les boites aux lettres sont souvent limitées en taille par les fournisseurs d'accès, même si cette taille augmente périodiquement. Plus les messages sont longs, moins on peut en mettre dedans. Les pièces jointes sont d'ailleurs aussi pénalisantes, mais elles sont parfois indispensables. Là encore, c'est une question de discernement.

Conclusions

  • Par défaut, postez en texte brut, « plain text » ou « aucun codage » avec Outlook Express. En pratique, codez en ISO-8859-1 (ou en UTF-8, éventuellement, Bien que ce soit l'avenir, tous les MUA ne savent pas forcément gérer correctement cet encodage) ;
  • ne postez en HTML qu'aux personnes qui vous l'ont permis, c'est plus poli ;
  • ne postez en HTML que si c'est vraiment utile, (faire simplement « joli » n'est pas utile. Pour faire joli, faites une œuvre d'art et envoyez la par la poste).

Voilà. Vous ne pourrez plus dire maintenant que vous ne saviez pas pourquoi il fallait  faire attention au codage de vos messages :-)