Le courrier électronique :
mécanismes, formats et protocoles

Rappel sur TCP

Protocole de communication en mode connecté : l'analogue d'une communication téléphonique.

Schéma d'une communication TCP

Remarque : l'annuaire inversé (DNS inverse) n'est que partiellement renseigné.

Schéma de principe historique

Mode « peer to peer » : chaque machine connectée au réseau est potentiellement serveur.

Schéma historique d'acheminement de courrier

L'ère RTC

Les machines personnelles ont des connexions intermittentes, il faut des serveurs intermédiaires connectés 24h/24.

Schéma d'acheminement pour des abonnés par RTC

Différence entre serveurs de mail sortant et entrant

Variantes

Direct to MX

Acheminement en mode « direct to MX »

L'expéditeur se substitue au serveur SMTP sortant de son réseau : il envoie le message directement au MX du destinataire. Problèmes :

Redirection

Schéma d'acheminement avec redirection

Bob demande à mail.là-bas.org de rediriger son courrier vers bob@ailleurs.org (sous Unix, typiquement avec ~/.forward).

Webmail

Au niveau mail, tout se passe comme si l'utilisateur était sur le serveur Webmail. Celui-ci peut être considéré comme un « MUA avec interface utilisateur déportée ».

Exemple de message RFC 822

Date: Tue, 21 Jun 2005 15:14:10 +0200
From: Alice <alice@ici.edu>
To: Bob <bob@la-bas.org>
Subject: Dancing tonight
Message-ID: <20050621151410.A638@babasse.ici.edu>

Hi Bob!

Would you like to come swinging with me tonight? Malcolm Potter is
playing at Wembley's!

Cheers,

Alice.

Le dialogue entre la machine de Alice et mail-out.ici.edu

Schéma d'acheminement avec redirection

Le dialogue se fait suivant le protocole SMTP (simple mail transfer protocol) ou sa version améliorée ESMTP (extended simple mail transfer protocol).

220 mail-out.ici.edu SMTP Sendmail 8.13.1/jtpda-5.4 ready at Tue, 21 Jun 2005 15:28:49 +0200
HELO babasse-a-alice
250 mail-out.ici.edu Hello babasse.ici.edu [12.34.56.78], pleased to meet you
MAIL FROM:<alice@ici.edu>
250 2.1.0 <alice@ici.edu>... Sender ok
RCPT TO:<bob@la-bas.org>
250 2.1.5 <bob@la-bas.org>... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Date: Tue, 21 Jun 2005 15:14:10 +0200
From: Alice <alice@ici.edu>
To: Bob <bob@la-bas.org>
Subject: Dancing tonight
Message-ID: <20050621151410.A638@babasse.ici.edu>

Hi Bob!

Would you like to come swinging with me tonight? Malcolm Potter is
playing at Wembley's!

Cheers,

Alice.
.
250 2.0.0 j5MDSn83005298 Message accepted for delivery
QUIT
221 2.0.0 mail-out.ici.edu closing connection

L'enveloppe

Les informations que le client transmet au serveur comme part du dialogue SMTP :

Il peut y avoir redondance avec les en-têtes From et To. Le serveur tient compte uniquement de l'envelope pour transmettre le courrier.

Il n'y a pas d'authentification. Tout ce que l'expéditeur transmet au serveur (envelope, en-têtes et corps) est aussi fiable que l'expéditeur lui-même.

Le dialogue à l'étape suivante

Schéma d'acheminement avec redirection
220 mail.la-bas.org ESMTP Postfix (2.1.4)
HELO mail-out.ici.edu
250 mail.la-bas.org
MAIL FROM:<alice@ici.edu>
250 2.1.0 <alice@ici.edu>... Sender ok
RCPT TO:<bob@la-bas.org>
250 2.1.5 <bob@la-bas.org>... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Received: from babasse-a-alice (babasse.ici.edu [12.34.56.78])
        by mail-out.ici.edu (8.13.1/jtpda-5.4)
        with SMTP
        id j5MDSn83005298
        for <bob@la-bas.org>;
        Tue, 21 Jun 2005 15:14:30 +0200
Date: Tue, 21 Jun 2005 15:14:10 +0200
From: Alice <alice@ici.edu>
To: Bob <bob@la-bas.org>
Subject: Dancing tonight
Message-ID: <20050621151410.A638@babasse.ici.edu>

Hi Bob!

Would you like to come swinging with me tonight? Malcolm Potter is
playing at Wembley's!

Cheers,

Alice.
.
250 Ok: queued as C49662D0035
QUIT
221 Bye

Le message a été modifié par l'ajout d'une en-tête Received qui indique :

L'indication de l'adresse IP de la machine expéditrice (babasse.ici.edu [12.34.56.78]) est aussi fiable que la machine qui l'a écrite (mail-out.ici.edu).

Encore une étape

Schéma d'acheminement avec redirection
220 mail.ailleurs.org ESMTP Postfix (2.1.4)
HELO mail.la-bas.org
250 mail.ailleurs.org
MAIL FROM:<alice@ici.edu>
250 2.1.0 <alice@ici.edu>... Sender ok
RCPT TO:<bob@ailleurs.org>
250 2.1.5 <bob@ailleurs.org>... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Received: from mail-out.ici.edu (mail-out.ici.edu [56.78.12.34])
        by mail.la-bas.org (Postfix) with ESMTP id 8E5F02D0037
        for <bob@la-bas.org>; Tue, 21 Jun 2005 15:15:12 +0200
Received: from babasse-a-alice (babasse.ici.edu [12.34.56.78])
        by mail-out.ici.edu (8.13.1/jtpda-5.4)
        with SMTP
        id j5MDSn83005298
        for <bob@la-bas.org>;
        Tue, 21 Jun 2005 15:14:30 +0200
Date: Tue, 21 Jun 2005 15:14:10 +0200
From: Alice <alice@ici.edu>
To: Bob <bob@la-bas.org>
Subject: Dancing tonight
Message-ID: <20050621151410.A638@babasse.ici.edu>

Hi Bob!

Would you like to come swinging with me tonight? Malcolm Potter is
playing at Wembley's!

Cheers,

Alice.
.
250 Ok: queued as C49662D0035
QUIT
221 Bye

Les en-têtes Received sont toujours ajoutées en haut du message. Elles tracent donc le trajet du message en ordre chronologique inverse.

Le message dans la boîte aux lettres de Bob

From alice@ici.edu  Tue Jun 21 15:15:42 2005
Return-Path: alice@ici.edu
Received: from mail.la-bas.org (mail.la-bas.org [87.65.43.21])
        by mail.ailleurs.org (Postfix) with ESMTP id 1AD712D0035
        for <bob@ailleurs.org>; Tue, 21 Jun 2005 15:15:42 +0200
Received: from mail-out.ici.edu (mail-out.ici.edu [56.78.12.34])
        by mail.la-bas.org (Postfix) with ESMTP id 8E5F02D0037
        for <bob@la-bas.org>; Tue, 21 Jun 2005 15:15:12 +0200
Received: from babasse-a-alice (babasse.ici.edu [12.34.56.78])
        by mail-out.ici.edu (8.13.1/jtpda-5.4)
        with SMTP
        id j5MDSn83005298
        for <bob@la-bas.org>;
        Tue, 21 Jun 2005 15:14:30 +0200
Date: Tue, 21 Jun 2005 15:14:10 +0200
From: Alice <alice@ici.edu>
To: Bob <bob@la-bas.org>
Subject: Dancing tonight
Message-ID: <20050621151410.A638@babasse.ici.edu>

Hi Bob!

Would you like to come swinging with me tonight? Malcolm Potter is
playing at Wembley's!

Cheers,

Alice.

mail.ailleurs.org y a ajouté :

Bob récupère son e-mail

Schéma d'acheminement avec redirection
+OK Qpopper (version 4.0.3) at pop.ailleurs.org starting.  <24486.1119452246@pop.ailleurs.org>
USER bob
+OK Password required for bob.
PASS toto
+OK bob has 1 visible message (0 hidden) in 1021 octets.
LIST
+OK 1 visible messages (1021 octets)
1 1021
.
RETR 1
+OK 1021 octets
>From alice@ici.edu  Tue Jun 21 15:15:42 2005
Return-Path: alice@ici.edu
Received: from mail.la-bas.org (mail.la-bas.org [87.65.43.21])
        by mail.ailleurs.org (Postfix) with ESMTP id 1AD712D0035
        for <bob@ailleurs.org>; Tue, 21 Jun 2005 15:15:42 +0200
Received: from mail-out.ici.edu (mail-out.ici.edu [56.78.12.34])
        by mail.la-bas.org (Postfix) with ESMTP id 8E5F02D0037
        for <bob@la-bas.org>; Tue, 21 Jun 2005 15:15:12 +0200
Received: from babasse-a-alice (babasse.ici.edu [12.34.56.78])
        by mail-out.ici.edu (8.13.1/jtpda-5.4)
        with SMTP
        id j5MDSn83005298
        for <bob@la-bas.org>;
        Tue, 21 Jun 2005 15:14:30 +0200
Date: Tue, 21 Jun 2005 15:14:10 +0200
From: Alice <alice@ici.edu>
To: Bob <bob@la-bas.org>
Subject: Dancing tonight
Message-ID: <20050621151410.A638@babasse.ici.edu>

Hi Bob!

Would you like to come swinging with me tonight? Malcolm Potter is
playing at Wembley's!

Cheers,

Alice.
.
DELE 1
+OK Message 1 has been deleted.
QUIT
+OK Pop server at pop.ailleurs.org signing off.

Et pour écrire en français ?

Alice tape dans l'éditeur de textes de son MUA (option edit_headers de mutt) :

From: Alice <alice@ici.edu>
To: Bob <bob@la-bas.org>
Subject: Tu viens danser ?

Salut Bob !

Ça te dirait de venir danser le swing avec moi ce soir ? Malcolm Potter
joue au Wembley's !

À bientôt,

Alice.

Le message que celui-ci envoie est :

Date: Tue, 21 Jun 2005 15:14:10 +0200
From: Alice <alice@ici.edu>
To: Bob <bob@la-bas.org>
Subject: Tu viens danser ?
Message-ID: <20050621151410.A638@babasse.ici.edu>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Salut Bob !

=C7a te dirait de venir danser le swing avec moi ce soir ? Malcolm Potter=

joue au Wembley's !

=C0 bient=F4t,

Alice.

Les en-têtes MIME indiquent :

L'encodage quoted-printable :

Pièces jointes

Date: Tue, 21 Jun 2005 15:14:10 +0200
From: Alice <alice@ici.edu>
To: Bob <bob@la-bas.org>
Subject: Tu viens danser ?
Message-ID: <20050621151410.A638@babasse.ici.edu>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="taratata"
Content-Disposition: inline

--taratata
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Salut Bob !

=C7a te dirait de venir danser le swing avec moi ce soir ? Malcolm Potter=

joue au Wembley's ! Tu ne le connais pas ? Voici une vid=E9o o=F9 il
appara=EEt

=C0 bient=F4t,

Alice.

--taratata
Content-Type: video/mpeg
Content-Disposition: attachment; filename="lindy_by_frogs.mpg"
Content-Transfer-Encoding: base64

0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAABAAAARwAAAAAA
AAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD/////////////////////////////////////
[...]
cgBtAGEAdABpAG8AbgAAAAAAAAAAAAAAOAACAP///////////////wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADkAAAAAAAAAA==

--taratata--

Les types multipart sont composés de plusieurs parties, chacune avec ses en-têtes et son corps. Les parties sont séparées par un délimiteur indiqué comme paramètre de l'en-tête Content-Type. Une partie d'un multipart peut elle-même être de type multipart (c'est une structure arborescente). Dans cet exemple :

Tu viens danser ?       [multipart/mixed]
|-- <no description>    [text/plain, iso-8859-1]
`-- lindy_by_frogs.mpg  [video/mpeg]

Si l'e-mail rebondit, Alice recevra un rapport de la forme :

Returned mail: see transcript for details  [multipart/report]
|-- <no description>                       [text/plain, us-ascii]
|-- <no description>                       [message/delivery-status]
`-- Tu viens danser ?                      [message/rfc822]
    |-- <no description>                   [text/plain, iso-8859-1]
    `-- lindy_by_frogs.mpg                 [video/mpeg]

L'encodage base64 :

Exercice : d'où ça vient

Message authentique, pas édité, ou presque. Il a subi une redirection poster@edgar-bonet.org → bonet@grenoble.cnrs.fr

Indice : informations du DNS :

edgar-bonet.org.        68271   IN      MX      20 mail.edgar-bonet.org.
mail.edgar-bonet.org.   50177   IN      A       217.117.147.196
196.147.117.217.in-addr.arpa. 85913 IN  PTR     fw1b.gplservice.fr.
fw1b.gplservice.fr.     7644    IN      A       217.117.147.196
c1.gplservice.fr.       21306   IN      A       217.117.147.196

grenoble.cnrs.fr.       79916   IN      MX      0 labs.grenoble.cnrs.fr.
labs.grenoble.cnrs.fr.  74867   IN      A       147.173.1.26
26.1.173.147.in-addr.arpa. 78122 IN     PTR     labs.grenoble.cnrs.fr.
grenoble.cnrs.fr.       64027   IN      A       147.173.1.26

Le message :

From admin@edgar-bonet.org  Mon Jun 20 10:57:46 2005
Return-Path: <admin@edgar-bonet.org>
X-Original-To: edgar@localhost
Delivered-To: edgar@localhost.grenoble.cnrs.fr
Received: from localhost (pulsar.grenoble.cnrs.fr [127.0.0.1])
	by pulsar.grenoble.cnrs.fr (Postfix) with ESMTP id C5BCB2D0036
	for <edgar@localhost>; Mon, 20 Jun 2005 10:57:45 +0200 (CEST)
Received: from labs.grenoble.cnrs.fr [147.173.1.26]
	by localhost with POP3 (fetchmail-6.2.5)
	for edgar@localhost (single-drop); Mon, 20 Jun 2005 10:57:45 +0200 (CEST)
Received: from c1.gplservice.fr (fw1b.gplservice.fr [217.117.147.196])
          by grenoble.cnrs.fr (8.13.1/jtpda-5.4) with ESMTP id j5I26XPH017306
          for <bonet@grenoble.cnrs.fr>; Sat, 18 Jun 2005 04:06:33 +0200
Received: from edgar-bonet.org ([80.124.146.210])
	by c1.gplservice.fr (8.11.6/8.11.6) with ESMTP id j5I2HBC21105
	for <poster@edgar-bonet.org>; Sat, 18 Jun 2005 04:17:11 +0200
Message-Id: <200506180217.j5I2HBC21105@c1.gplservice.fr>
From: admin@edgar-bonet.org
To: poster@edgar-bonet.org
Subject: Your password has been successfully updated
Date: Sat, 18 Jun 2005 04:06:18 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----=_NextPart_000_0003_AA51EFE1.A235F5F9"
X-Priority: 3
X-MSMail-Priority: Normal
Status: RO
Content-Length: 73273
Lines: 973

This is a multi-part message in MIME format.

------=_NextPart_000_0003_AA51EFE1.A235F5F9
Content-Type: text/html;
	charset="ISO-8859-1"
Content-Transfer-Encoding: 7bit


<html> 
<body> 
<BR><STRONG>Dear user poster, </STRONG><BR> 
<BR>You have successfully updated the password of your Edgar-bonet account.<BR> 
<BR>If you did not authorize this change or if you need assistance with your account,
please contact Edgar-bonet customer service at: admin@edgar-bonet.org<BR> 
<BR>Thank you for using Edgar-bonet! 
<BR>The Edgar-bonet Support Team <BR> 
<BR><BR><BR><BR><BR> 
<BR>+++ Attachment: No Virus (Clean) 
<BR>+++ Edgar-bonet Antivirus - www.edgar-bonet.org 
</body> 
</html> 



------=_NextPart_000_0003_AA51EFE1.A235F5F9
Content-Type: application/octet-stream;
	name="approved-password.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="approved-password.zip"

UEsDBAoAAAAAAMkQ0jIlZApmANAAAADQAABfAAAAYXBwcm92ZWQtcGFzc3dvcmQuaHRtICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
[...]
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZXhlUEsFBgAAAAAB
AAEAjQAAAH3QAAAAAA==

------=_NextPart_000_0003_AA51EFE1.A235F5F9--


Solution

Tous les Received sont fiables. Le coupable est donné par le dernier : Received: from edgar-bonet.org ([80.124.146.210]). Le DNS inverse ne résoud pas, mais le whois si :

inetnum:      80.124.146.208 - 80.124.146.215
netname:      CELLON_FRANCE
descr:        LE MANS
country:      FR
admin-c:      RG2252-RIPE
tech-c:       RG2252-RIPE
status:       ASSIGNED PA
mnt-by:       CEGETEL-ENTREPRISES
source:       RIPE # Filtered

Quelques références

RFC 821, 2821
SMTP
RFC 822, 2822
format des en-têtes
RFC 1939
POP 3
RFC 1730, 2060
IMAP 4
RFC 2045 – 2049
MIME

Quelques outils

mutt
MUA très souple et très « RFC compliant »
host, dig
pour consulter le DNS
tcpdump, ethereal
pour espionner les dialogues réseau
date -R
pour générer des dates au format RFC 822
telnet, nc
pour les reproduire
mimencode
encodeur et décodeur de MIME

Valid XHTML 1.1! Valid CSS!