Date de publication du RFC : Août 2012
Auteur(s) du RFC : A. Melnikov (Isode), K. Carlberg (G11)
Chemin des normes
Première rédaction de cet article le 26 août 2012
Des tas d'utilisateurs du courrier électronique souhaiteraient un mécanisme de priorité,
permettant de dire que tel message est plus important que tel autre et
devrait être traité en premier. Après tout, les ressources (par
exemple la capacité disponible dans le réseau) sont souvent
insuffisantes et il serait souhaitable que les messages vraiment
urgents en profitent avant les informations envoyées par
Twitter (« vous avez un nouvel abonné »). Il n'existait pas jusqu'à présent,
pour un serveur de messagerie, de
moyen standard en SMTP de dire à un de ses
pairs quelle était la priorité d'un message. C'est désormais fait
grâce à la nouvelle extension SMTP
MT-PRIORITY
.
Dans les en-têtes du message (le format des messages est normalisé
dans le RFC 5322), il existait un en-tête
standard, Priority:
, décrit dans le RFC 2156. Ce dernier avait à l'origine été écrit
pour assurer l'interfaçage avec X.400. Ce
système avait été un échec complet mais l'en-tête
Priority:
garde son utilité (on trouve aussi
souvent un en-tête non officiel et n'ayant pas exactement la même
sémantique, notamment par le nombre de niveaux et leur représentation,
X-Priority:
.) Par contre,
l'inconvénient de noter la priorité dans le message est que cela
oblige les MTA à analyser les en-têtes, ce qui
n'est pas normalement leur rôle. De manière cohérente avec l'évolution
du courrier électronique depuis quinze ans (meilleure séparation entre
le format du RFC 5322 et le transport normalisé dans le RFC 5321), la priorité est désormais exprimable lors de la
session SMTP. (Un autre
RFC en cours d'écriture, draft-melnikov-smtp-priority-tunneling
, utilisera un nouvel
en-tête, MT-Priority:
, pour le cas où on doive tunneler des
messages prioritaires au dessus de MTAs qui ne gèrent pas les
priorités.) Par exemple, un MTA dont les files d'attente d'envoi de
messages sont grandes, pourra mettre au début de la file les messages
de plus forte priorité.
Notez bien que c'est une priorité, donc
relative (« ce message est très urgent, celui-ci
l'est moins ») pas d'une garantie de délai. Le courrier électronique
demeure « au mieux », sans délais certains. Les annexes de ce RFC
contiennent des discussions plus en détails sur certaines utilisations
de ces priorités. Si on ne se satisfait pas de la délivrance « au
mieux », il faut utiliser une autre extension SMTP
(DELIVERBY
dans le RFC 2852 et section
5.2 de notre RFC 6710) ou regarder du côté de techniques réseaux comme
DiffServ (RFC 2474).
Notez aussi que l'une des raisons du peu de déploiement effectif de
l'en-tête Priority:
est un problème de
confiance (comme souvent quand on prétend faire
de la qualité de service : tout le monde va
demander la qualité maximale). Rien ne garantit que celui qui met dans
ses messages Priority: urgent
le fait à bon
escient, peut-être ajoute-t-il systématiquement cette indication pour
que ses messages aillent plus vite. Notre RFC 6710 précise
donc bien que le MTA récepteur n'est pas obligé
d'honorer les priorités de n'importe qui. Il peut ne le faire que
lorsqu'il connait l'expéditeur et lui fait confiance (voir les
mécanismes utilisés en sections 4.1 et 5.1).
Maintenant, les détails techniques (section 3) : la nouvelle extension SMTP se
nomme Priority Message Handling et est annoncée par
le mot-clé MT-PRIORITY
lors de la connexion
SMTP. Par exemple (S indique le serveur et C le client) :
S: 220 example.com SMTP server here C: EHLO mua.example.net S: 250-example.com S: 250-AUTH STARTTLS S: 250-AUTH SCRAM-SHA-1 DIGEST-MD5 S: 250-SIZE 20000000 S: 250-DSN S: 250-ENHANCEDSTATUSCODES S: 250 MT-PRIORITY MIXER
(Le paramètre MIXER
est le nom d'une politique de
priorités et est expliqué plus loin, section 9.2.)
La priorité du message est annoncée par un paramètre de la commande
MAIL FROM
également nommé
MT-PRIORITY
. Elle va de -9 (plus faible priorité)
à 9 (priorité la plus élevée). Par exemple :
C: MAIL FROM:<eljefe@example.net> MT-PRIORITY=6 S: 250 2.1.0 <eljefe@example.net> sender ok C: RCPT TO:<topbanana@example.com> S: 250 2.1.5 <topbanana@example.com> recipient ok
En pratique, tous les serveurs ne géreront pas forcément 19 niveaux distincts (il n'y en avait que 3 dans le RFC 2156). L'annexe E explique pourquoi ce choix de 19.
Cette extension est utilisable aussi bien pendant la soumission (RFC 6409) que pendant la transmission (RFC 5321), ainsi qu'en LMTP (RFC 2033).
Lorsque le MTA « serveur » gérant cette extension reçoit un message ayant une priorité
explicite, il va le traiter en fonction de cette priorité. Par défaut,
la priorité est de zéro (d'où le choix d'avoir des priorités
négatives, on voit tout de suite si la priorité est plus ou moins
importante que celle par défaut, voir annexe E pour les raisons de ce
choix). En prime, le MTA va noter cette priorité dans l'en-tête
Received:
qu'il va ajouter au message. Avant
cela, le MTA aura du toutefois vérifier l'émetteur : le RFC précise
qu'on peut accepter des priorités négatives de n'importe qui mais
qu'on ne devrait accepter des positives (élevant le niveau de
priorité) que des émetteurs qu'on a authentifiés d'une manière ou
d'une autre, et à qui on fait confiance. Autrement, il serait facile
de réclamer systématiquement la plus haute priorité (9), épuisant
ainsi les ressources du serveur. Un exemple
d'une politique d'autorisation pourrait être « n'accepter de priorités
positives que depuis les utilisateurs authentifiés avec la commande
AUTH
- RFC 4954 - ainsi que depuis les MTA dont
l'adresse IP a été mise dans une liste blanche,
suite à un accord bilatéral avec leur gérant ». (Voir aussi les sections
5.1 et 11.)
Naturellemnt, un MTA peut avoir des politiques plus complexes comme
de modifier automatiquement la priorité demandée en fonction de
l'émetteur (« maximum 3 pour
2001:db8:666::1:25
»). Il doit dans ce cas
prévenir l'émetteur en réponse au MAIL FROM
:
C: MAIL FROM:<eljefe@example.net> MT-PRIORITY=6 ... S: 250 X.3.6 3 is the new priority assigned to the message
Lorsqu'un serveur transmet un message à un autre serveur SMTP, il
inclut la priorité, sauf évidemment si l'autre serveur n'a pas annoncé
qu'il gérait les priorités (extension
MT-PRIORITY
).
Les considérations pratiques liées au déploiement de cette
extension MT-PRIORITY
figurent dans la section
9. Ainsi, si on a plusieurs serveurs de courrier pour un même domaine
(via plisieurs enregistrements MX), le RFC
recommande de veiller à ce que tous ou aucun acceptent l'extension de
gestion de la priorité. Autrement, des problèmes difficiles à déboguer
vont survenir. (De toute façon, avoir plusieurs enregistrements MX est
complexe et déconseillé pour les petits
domaines, exactement pour ce genre de raisons.)
J'ai parlé un peu plus haut du paramètre « Nom de la politique de
priorité » qu'un serveur peut ajouter lorsqu'il indique qu'il gère les
priorités. La section 9.2 décrit plus en détail ce que cela
signifie. L'idée est que différentes organisations vont avoir des
politiques de priorité différentes : nombre de niveaux,
notamment. L'idée est de donner un nom à ces politiques afin de
permettre à un serveur d'indiquer quelle politiques il suit. Par
exemple, si le serveur a une politique qui ne gère que trois niveaux,
-1, 0 et 1, un message indiquant qu'il a réduit la priorité demandée
de 3 à 1 n'est pas inquiétant. Il est recommandé d'enregistrer les
politiques à l'IANA
(la section « SMTP PRIORITY extension Priority Assignment
Policy »). Ce nouveau registre est rempli selon la règle
« Norme nécessaire » du
RFC 5226. Il comprend actuellement trois
politiques, issues de normes existantes. Par défaut, la politique
appliquée est MIXER
qui est celle du RFC 2156 et reprise dans l'annexe B de notre RFC 6710 :
trois niveaux de priorité seulement (-4, 0 et 4), pas de valeurs numériques définies par
défaut pour les tailles maximales des messages ou pour les délais de retransmission.
Deux autres annexes décrivent des utilisations des priorités, avec
la politique associée. L'annexe A concerne l'usage militaire
(politique STANAG4406
, six niveaux, les
deux plus urgents étant étiquetés Flash et
Override). Et l'annexe C concerne les services
d'urgence (RFC 4190 et RFC 4412). Un avis personnel : il n'est sans doute
pas sérieux
d'utiliser le courrier électronique sur
l'Internet public pour des appels aux pompiers
ou des messages militaires alors que l'ennemi attaque.
Puisqu'on a parlé de l'IANA, outre ce nouveau registre, les enregistrements suivants ont été faits (section 10) :
MT-PRIORITY
a été ajouté aux
extensions SMTP (la section « SMTP Service
Extensions »).Et questions mises en œuvre ? Aujourd'hui, un
Postfix typique, par exemple, ne gère pas
encore ces priorités (et répond 555 5.5.4 Unsupported
option: MT-PRIORITY=3
si on essaie.) Il existe apparemment déjà
trois MTA qui ont en interne ce concept de priorité et qui, en
l'absence de norme, la déterminaient de manière non-standard. Ils
n'ont pas encore été adaptés à ce RFC. Pour cela, l'annexe D donne
d'intéressants avis sur les stratégies d'implémentation possibles.
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)