Date de publication du RFC : Février 2017
Auteur(s) du RFC : T. Hansen (AT&T
  Laboratories), A. Melnikov (Isode)
Chemin des normes
Réalisé dans le cadre du groupe de travail IETF appsawg
Première rédaction de cet article le 1 mars 2017
Une demande fréquente des utilisateurs du courrier électronique est d'avoir un mécanisme permettant de savoir si et quand le message a été lu par le destinataire. Comme toutes les demandes des utilisateurs, il ne faut pas forcément la satisfaire sans réfléchir (elle pose des gros problèmes de vie privée et, en outre, elle ne garantit pas que le message a été traité, juste que le logiciel l'a affiché). Ce n'est pas par hasard que cette fonction « accusé de réception » était souvent présente (et mise en avant par les vendeurs) pour les systèmes de messagerie conçus pour des environnements très bureaucratiques (le RFC cite l'antédiluvien X.400). Mais, bon, si les gens y tiennent, cette possibilité existe dans la norme : ce nouveau RFC spécifie un mécanisme permettant de signaler qu'on souhaite un tel accusé de réception, ainsi qu'un format structuré (lisible par un programme comme le MUA) pour les accusés de réception qui seront (peut-être) envoyés. Ces accusés de réception sont appelés MDN pour Message Disposition Notification. Ce RFC remplace son prédécesseur, le RFC 3798.
Donc, résumé général du fonctionnement de ce système :
    l'émetteur d'un message qui veut un accusé de réception met un
    en-tête Disposition-Notification-To: dans son
    message. Le récepteur, s'il le désire,
    répondra à cette demande lors de la lecture du message, en
    envoyant un message de type MIME
    message/disposition-notification (a priori
    situé à l'intérieur d'un rapport plus général, de type
    multipart/report, cf. RFC 6522). Tout ceci
    est sous un format structuré, donc peut être traité par un
    programme, typiquement le MUA. Voilà, vous
    connaissez l'essentiel de ce RFC. Place aux
    détails.
À quoi servent les MDN (Message Disposition Notification, un concept plus large que celui d'accusé de réception) ? Voici le cahier des charges proposé par notre RFC :
Première partie de la norme, la demande
    d'un MDN (section 2). L'émetteur le fait en ajoutant dans son message un
    en-tête Disposition-Notification-To:
    indiquant les adresses auxquelles envoyer le MDN. Par exemple :
    
Disposition-Notification-To: stephane+mdn@bortzmeyer.org
    
    Le risque d'utilisation de ce truc pour bombarder de message un
    tiers innocent est évident. C'est pour cela que le RFC recommande
    d'ignorer cet en-tête si l'adresse indiquée ne coïncide pas avec
    celle stockée dans l'en-tête
    Return-Path: (voir section 6.4). Dans tous les cas,
    rappelez-vous bien que le logiciel à la réception est libre de
    faire ce qu'il veut. Il peut estimer que ces MDN ne servent à rien
    et ignorer les Disposition-Notification-To:,
    il peut demander une autorisation à l'utilisateur il peut envoyer le MDN de
    manière totalement automatique (après les vérifications de
    vraisemblance comme celle du
    il peut envoyer le MDN de
    manière totalement automatique (après les vérifications de
    vraisemblance comme celle du Return-Path:), etc.
Deuxième partie de la norme, le format du MDN lui-même (section
    3 du RFC). La réponse est dans un message de type
    multipart/report (type défini dans le RFC 6522), avec le type de rapport (paramètre report-type)
    disposition-notification. Le MDN lui-même a
    deux ou trois parties : une première partie est du texte libre,
    lisible par un humain, une deuxième est structurée, et de type
    MIME message/disposition-notification, la
    troisième partie est optionnelle et est le message auquel on
    « répond ».
La deuxième partie du MDN est la plus intéressante. Son corps est
    composé de plusieurs champs nom: valeur, dont
    deux sont obligatoires, Final-Recipient: et
    Disposition: qui indique ce qui est arrivé au
    message. Parmi les autres champs, notez le
    Reporting-UA:, indiquant le logiciel qui a
    répondu, et dont le RFC recommande qu'il ne soit pas trop
    détaillé, car il donne des informations qui peuvent être utiles à
    un éventuel attaquant. Comme Reporting-UA:,
    le champ Original-Message-ID: n'est pas
    obligatoire mais il est très utile : c'est lui qui permet à
    l'émetteur du message original de faire
    la jointure entre ce qu'il a envoyé et le MDN reçu. (Il n'est pas
    obligatoire car le message original n'a pas forcément un
    Message-ID:. Mais, s'il en a un, il faut
    inclure Original-Message-ID: dans le
    MDN.)
Le champ le plus important est sans doute
    Disposition:. Il indique ce qui est arrivé au
    message original (disposition type) : a-t-il
    été affiché à un utilisateur (displayed, ce
    qui ne garantit pas du tout qu'il soit arrivé au cerveau de l'utilisateur), traité sans être montré à un
    utilisateur (processed), effacé
    (deleted) ? Ce champ
    Disposition: indique aussi
    (disposition mode) si le sort du
    message a été décidé par un être humain ou bien automatiquement
    (par exemple par Sieve),
    et si le MDN a été généré suite à une autorisation explicite ou
    bien automatiquement. Notez bien (et c'est la principale raison
    pour laquelle les accusés de réception sont une fausse bonne idée)
    que la seule façon d'être sûr que le message aura été traité par
    son destinataire, est de recevoir une réponse explicite et
    manuelle de sa part.
Enfin, le champ Error: sert à transporter
    des messages... d'erreur.
Voici un exemple complet de MDN, tiré de la section 9 :
Date: Wed, 20 Sep 1995 00:19:00 (EDT) -0400
From: Joe Recipient <Joe_Recipient@example.com>
Message-Id: <199509200019.12345@example.com>
Subject: Re: First draft of report
To: Jane Sender <Jane_Sender@example.org>
MIME-Version: 1.0
Content-Type: multipart/report; report-type=disposition-notification;
      boundary="RAA14128.773615765/example.com"
--RAA14128.773615765/example.com
Content-type: text/plain
The message sent on 1995 Sep 19 at 13:30:00 (EDT) -0400 to Joe
Recipient <Joe_Recipient@example.com> with subject "First draft of
report" has been displayed.
This is no guarantee that the message has been read or understood.
--RAA14128.773615765/example.com
Content-type: message/disposition-notification
Reporting-UA: joes-pc.cs.example.com; Foomail 97.1
Original-Recipient: rfc822;Joe_Recipient@example.com
Final-Recipient: rfc822;Joe_Recipient@example.com
Original-Message-ID: <199509192301.23456@example.org>
Disposition: manual-action/MDN-sent-manually; displayed
--RAA14128.773615765/example.com
Content-type: message/rfc822
[original message optionally goes here]
--RAA14128.773615765/example.com--
      
    Notez la première partie, en langue naturelle (ici en
    anglais), la seconde, avec les informations structurées (ici, le
    destinataire a affiché le message - manual-action
    ... displayed - puis autorisé/déclenché manuellement
    l'envoi du MDN - MDN-sent-manually), et la
    présence de la troisième partie, qui est optionnelle.
    
Un peu de sécurité pour finir le RFC. D'abord, évidemment, il
    ne faut pas accorder trop d'importance aux MDN. Ils peuvent être
    fabriqués de toutes pièces, comme n'importe quel message sur
    l'Internet. Ensuite, il faut faire attention à la vie
    privée des utilisateurs. Le destinataire n'a pas
    forcément envie qu'on sache si et quand il a lu un message ! Le
    destinataire, ou son logiciel, ont donc parfaitement le droit de
    refuser d'envoyer un MDN (ce qui diminue encore l'intérêt de cette
    technique, qui était déjà très faible). Même des informations
    inoffensives à première vue, comme le contenu du champ
    Disposition: peuvent être considérées comme
    sensibles. Si on configure Sieve pour
    rejeter (RFC 5429) automatiquement tous les
    messages d'une certaine personne, on n'a pas forcément envie
    qu'elle le sache. Le RFC précise donc qu'on peut envoyer
    manual-action/MDN-sent-manually dans ce cas,
    pour cacher le fait que c'était automatique.
Quels sont les changements depuis le précédent RFC, le RFC 3798 ? Ils sont résumés dans l'annexe
    A. Tout ce qui touche à la vie privée a été sérieusement renforcé
    (les MDN sont très indiscrets). Les
    champs commençant par un X- ont été supprimés
    de la spécification, suivant le RFC 6648. La
    grammaire a été corrigée (plusieurs bogues
    et ambiguïtés).
En pratique, les MDN ne semblent guère utilisés dans l'Internet et ont peu de chance de marcher. Je note par exemple qu'aussi bien le MUA Unix mutt que le service Gmail semblent les ignorer complètement. Mais d'autres logiciels ont cette fonction.
Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)