Les listes de diffusion
L'auteur de cette page est : Jean-Baptiste Yunes
Le service d'échange de courrier est normalisé depuis 1982 par la RFC 821 et la RFC 822. Il existe de très nombreux autres
documents décrivant diverses extensions. On peut citer notamment les
extensions relatives à la description du contenu du courrier connues sous le
nom d'extension MIME (Multipurpose Internet Mail Extension) : RFC 2045, RFC 2046, RFC 2047, RFC 2048 et RFC 2049.
Ce service permet d'échanger des messages (couramment appelés courriers
électroniques, mèls ou email) entre utilisateurs à travers un réseau de
distribution constitué de serveurs se passant le message de proche en proche.
Chaque destinataire étant identifié par une adresse électronique prenant
généralement la forme suivante : Destinataire@Adresse par
exemple Jean-Baptiste.Yunes@liafa.jussieu.fr.
Chaque courrier est constitué d'un entête et d'un corps. L'entête contient une
liste de couples champ/valeur qui permettent au réseau de distribution de
transporter le message et au destinataire de le consulter. Voici un exemple de
courrier :
From pincemi@chambre.premieretage.fr.fr Tue Nov 7 13:38:56 2000
Received: from mail.couloir.fr (mail.couloir.fr [xxx.xxx.xxx.xxx])
by salleamanger.rezdechausse.fr (8.8.8+Sun/8.8.8) with ESMTP id NAA27800
for <pincemoi@salleamanger.rezdechaussee.fr>; Tue, 7 Nov 2000 13:38:56 +0100 (MET)
Received: from escalier.fr (IDENT:root@escalier.fr [xxx.xxx.xxx.xxx])
by mail.couloir.fr (8.9.3/jtpda-5.3.2) with ESMTP id NAA11960
for <pincemoi@salleamanger.rezdechaussee.fr>; Tue, 7 Nov 2000 13:38:56 +0100 (MET)
Received: from premieretage.fr (mailhost.premieretage.fr [xxx.xxx.xxx.xxx])
by escalier.fr (8.9.3/jtpda-5.3.2) with ESMTP id NAA20082
for <pincemoi@salleamanger.rezdechaussee.fr>; Tue, 7 Nov 2000 13:38:54 +0100
Received: from chambre (chambre.premieretage.fr [xxx.xxx.xxx.xxx])
by premieretage.fr (8.10.0/8.10.0) with SMTP id eA7CVAx02165
for <pincemoi@salleamanger.rezdechaussee.fr>; Tue, 7 Nov 2000 13:31:10 +0100 (MET)
Message-Id: <200011071231.eA7CVAx02165@premieretage.fr>
To: pincemoi@salleamanger.rezdechaussee.fr
Subject: Une question
Date: Tue, 7 Nov 2000 13:38:49 +0100
From: Joe Pincemi <pincemi@chambre.premieretage.fr>
Reply-To: pincemi@chambre.premieretage.fr
X-Mailer: by Apple MailViewer (2.106)
Content-Length: 41
Tu tombes à l'eau. Je reste ?
A plus
Joe
On peut y suivre le passage du courrier envoyé par pincemi depuis chambre.premieretage.fr à destination de pincemoi@salleamanger.rezdechaussee.fr : chambre, premieretage,
escalier, couloir
et enfin salleamanger. Il circule à la manière
d'un courrier postal habituel.
Si une partie importante d'échange de courrier est constituée de messages
envoyés par un utilisateur à un autre utilisateur, il est possible de préciser
plusieurs destinataires. Ce qui constitue une forme primitive de diffusion de
courrier.
Lorsque la liste des destinataires est longue ou difficile à maintenir
(imaginez que chaque personne concernée par la diffusion soit obligée de
mettre à jour la liste des destinataires) il est possible de définir un alias dans le fichier
système de distribution de courrier. Par exemple :
mescopains: joe, jack, william@jail.wisconsin.us, averell@jail.missouri.us
sauveurs: zorro, lucky.luke@daisytown.texas.us
Toute tentative d'envoi de courrier à l'adresse mescopains ou sauveurs
(sur la machine considérée) redistribuera ce dernier à chacune des adresses
contenues dans la liste. Dans ce cas la gestion de la liste est centralisée.
Mais ce mécanisme comporte, au moins, deux défauts.
Tout d'abord la mise à jour d'une telle liste fait généralement appel au
super-utilisateur. On peut s'y prendre autrement (en demandant à inclure une
liste contenue dans un fichier) mais ce n'est pas d'usage courant
essentiellement pour des raisons de sécurité.
Ensuite, un courrier envoyé à une telle liste est marqué de façon que les
réponses soient faites à l'envoyeur et non à la liste elle-même. On peut
modifier ce comportement manuellement mais ce n'est pas pratique et surtout
cela ne peut être fait automatiquement.
Pour résoudre les différents problèmes il existe de nombreux logiciels de
gestion de liste permettant d'obtenir à peu près tous les effets voulus. On
peut citer : Majordomo, Mailman et Tulp.
Pour apparaître dans une liste de diffusion il faut y souscrire (subscribe)
et pour en disparaître annuler sa souscription (unsubscribe). Ces deux
commandes étant normalement adressées au destinataire générique liste-request. Ces procédures
pouvant être soumises à l'approbation du gestionnaire de la liste (lequel ne
doit pas en principe refuser d'annuler un abonnement).
Apparaître dans une liste ne signifie pas que l'on a le droit d'y poster un
message mais simplement qu'on les recevra. Car le postage peut être restreint
de diverses manières. Principalement par autorisation explicite ou par
modération. Car les listes peuvent en général être modérées, signifiant que le
contenu des messages peut être filtré. Dans ce cas le modérateur est un
intervenant intermédiaire entre le processus de gestion de courriers entrant
et le processus de diffusion. De plus certaines listes autorisent le postage
quand bien même l'envoyeur n'est pas lui-même membre de la liste : on parle
parfois de listes ouvertes.
- owner
- c'est le propriétaire de la liste. En général son créateur.
- subscriber
- destinataire des messages postés sur la liste.
- subscription
- processus d'inscription sur la liste des destinataires de la
liste.
- open subscription
- procédure d'inscription non restreinte.
- closed subscription
- procédure d'inscription soumise à l'approbation.
- moderation
- procédure de censure.
- moderator
- le censeur responsable du filtrage des messages postés
- moderated list
- liste sur laquelle le postage est soumis à l'approbation du
modérateur.
- administrator
- personne chargée d'administrer la liste.
- open list
- liste dans laquelle le postage est autorisé à toute personne (inscrite
ou non).
- restricted list
- liste dans laquelle le postage est restreint (explicitement autorisé à
certaines personnes membres ou non de la liste).
- closed list
- liste dans laquelle le postage est limité aux seuls membres.
- bounces
- courrier dont la délivrance conduit à un cycle.
- archive
- mécanisme permettant d'archiver les messages postés.
- digest
- mécanisme permettant de fournir aux membres de la liste un condensé
des messages postés pendant une période donnée.
- member
- membre de la liste.
- post
- action de postage d'un message.
Ces diverses applications fonctionnent reposent toutes sur les mêmes
mécanismes. On y adresse un courrier par l'intermédiaire d'une adresse
générique (portant le nom de la liste), celui-ci est receptionné par
l'application qui effectuera un certain nombre de traitements à la fois sur
l'entête et le corps du message, puis le redistribuera aux destinataires. Il
est aussi possible d'archiver les messages et/ou d'en fabriquer des
condensés.
L'adresse générique est un alias de la forme suivante :
liste: "|exécutable"
permettant de fournir en entrée du programme exécutable le message à diffuser sur la liste. Par exemple pour Majordomo on a :
essai: "|/utils/majordomo/wrapper resend -l essai -r essai essai-outgoing"
owner-essai: \joe
essai-owner: owner-essai
essai-approval: \joe
essai-request: "|/utils/majordomo/wrapper request-answer essai"
essai-outgoing: :include:/utils/majordomo/lists/essai
ou pour Mailman :
test: "|/utils/mailman/mail/wrapper post test"
test-admin: "|/utils/mailman/mail/wrapper mailowner test"
test-request: "|/utils/mailman/mail/wrapper mailcmd test"
test-owner: test-admin
Chacune de ces applications prend en charge le courrier pour lui appliquer
diverses politiques de gestion afin de le redistribuer.
Le logiciel Majordomo
est disponible auprès de GreatCircle. Il s'agit d'un ensemble de
scripts écrits en Perl. Son principal défaut est de ne pas réaliser la
création de liste automatiquement, l'essentiel de la procédure doit être
exécutée à la main.
Les outils fournis sont : bounce, digest, majordomo et resend.
Ce script est chargé de la redistribution des messages entrants sur une
liste donnée. On l'utilise généralement avec les options -l et -r.
L'option -l permet de préciser de quelle
liste il s'agit.
L'option -r permet de modifier le champ Reply-To.
Dans l'exemple précédent la redistribution des
messages entrant sur l'adresse essai est donc
faite en utilisant la configuration de la liste essai. Les messages seront redistribués à l'ensemble
des adresses présentes données par essai-outgoing en utilisant la valeur essai@machine pour le champ
Reply-To. Ici essai-outgoing fait référence à une liste contenue
dans le fichier /utils/majordomo/lists/essai.
Ce script est chargé de traiter les requêtes d'administration. On s'y
adresse généralement par l'intermédiaire des adresses suivantes :
majordomo: "|/utils/majordomo/wrapper majordomo"
owner-majordomo: \joe
majordomo-owner: owner-majordomo
Les requêtes doivent être encapsulées dans le corps du message envoyé.
Elles sont les suivantes :
- subscribe
- dont la syntaxe est subscribe liste [adresse]
permet de réclamer une inscription sur la liste
pour l'adresse précisée si tel est le cas, ou
pour l'envoyeur sinon. On peut donc utiliser cette commande pour tenter
d'inscrire quelqu'un d'autre que soi-même.
- unsubscribe
- dont la syntaxe est unsubscribe liste [adresse]
permettant de réaliser l'opération inverse.
- auth
- dont la syntaxe est auth mot-clé subscribe liste
[adresse] permet de confirmer une
requête d'inscription lorsque la liste est configurée pour cela (+confirm). Ceci permet au moins de vérifier que
le destinataire est bien d'accord.
- get
- dont la syntaxe est get liste fichier permet
de recevoir le fichier attachée à la liste.
- index
- dont la syntaxe est index liste permet de retrouver la liste des
fichiers attachés à la liste.
- which
- dont la syntaxe est which [adresse] permet de retrouver l'ensemble des
listes auxquelles on ou adresse est
abonné.
- who
- dont la syntaxe est who liste permet de retrouver l'ensemble des
membres de la liste.
- info
- dont la syntaxe est info liste permet de recevoir des informations
d'ordre générales sur la liste.
- intro
- dont la syntaxe est intro liste permet de recevoir le message
introductif de la liste. Ce message est
normalement réservé aux membres.
- lists
- permet de recevoir l'ensemble des listes gérées par ce serveur.
- help
- permet de recevoir une documentation du serveur.
- end
- permet de clore la liste des commandes envoyées (le reste du message
est alors simplement ignoré).
En plus de ces messages il en existe certains autres à l'usage des
administrateurs :
- approve
- dont la syntaxe est approve mot-de-passe subscribe|unsubscribe liste adresse permet d'approuver la requête
d'inscription ou d'annulation d'un utilisateur. Le mot
de passe normalement connu du seul administrateur circule en
clair sur le réseau, ce qui signifie entre autres que ce mécanisme tout
sauf sûr, mais c'est sans doute mieux que rien.
- newinfo
- dont la syntaxe est newinfo liste mot-de-passe
permet d'indiquer que le nouveau texte d'informations générales de la
liste suit immédiatement la commande. Sa fin
est indiquée par la présence d'une ligne contenant EOF (en toutes lettres).
- newintro
- dont la syntaxe est newintro liste mot-de-passe
réalise la mise à jour du message d'introduction de la liste (même format que newinfo).
- config
- dont la syntaxe est config liste mot-de-passe
permet de recevoir le fichier de configuration de la liste.
- newconfig
- dont la syntaxe est newconfig liste mot-de-passe
permet d'installer une nouvelle configuration pour la liste. Celle-ci suit immédiatement la commande et se
termine par EOF (en toutes lettres).
- writeconfig
- dont la syntaxe est writeconfig liste mot-de-passe
permet de réécrire la configuration au format standard.
- mkdigest
- dont la syntaxe est mkdigest liste-condensée [liste-de-sortie] mot-de-passe permet de forcer la création d'un
nouveau condensé. La liste de sortie permet de
modifier la distribution par défaut.
Chaque liste possède un fichier de configuration (normalemment nommé liste.config). On y trouve les
directives suivantes (lesquelles peuvent être mises à jour à l'aide de la
commande newconfig) :
- admin_passwd = mot-de-passe
- utilisé par majordomo positionne la valeur du
mot de passe pour les tâches
administratives.
- administrivia = yes|no
- utilisé par resend. Si la valeur est positive
alors Majordomo renverra les messages contenant des requêtes
d'inscription/annulation postés sur la liste vers la gestionnaire de la
liste.
- advertise liste-regexp
- utilisé par majordomo autorise les personnes
dont l'adresse correspond à l'une des expressions
régulières à voir apparaître la liste en réponse à une commande
lists. Attention noadvertise est prioritaire.
- announcements = yes|no
- utilisé par majordomo permet dans le cas
positif d'envoyer au propriétaire de la liste chaque requête
d'inscription/annulation.
- approve_passwd = mot-de-passe
- utilisé par resend positionne la valeur du
mot de passe à utiliser par le modérateur (voir
listes modérées).
- archive_dir = répertoire
- non utilisé.
- comments texte
- utilisé par majordomo pour agrémenter les
fichiers de configuration.
- date_info = yes|no
- utilisé par majordomo pour ajouter la date de
dernière modification au fichier d'informations.
- date_intro = yes|no
- utilisé par majordomo pour ajouter la date de
dernière modification au fichier d'introduction.
- debug = yes|no
- utilisé par resend permet de simuler la
distribution sans l'effectuer (yes).
- description = texte
- utilisé par majordomo permet de faire
apparaître le texte (court) en réponse à la
commande lists.
- digest_archive = répertoire
- non utilisé
- digest_issue = nombre
- utilisé par digest numéro du prochain
condensé.
- digest-maxdays = nombre
- utilisé par digest pour réaliser un condensé
lorsque le plus vieux message non condensé est vieux de digest-maxdays jours.
- digest_maxlines = nombre
- utilisé par digest pour réaliser un nouveau
condensé lorsque le condensé courant dépasse cette limite.
- digest_name = identificateur
- utilisé par digest comme titre du message du
condensé. Le numéro de volume et de série sont utilisés comme
suffixes.
- digest_rm_footer = mot
- non utilisé
- digest_rm_fronter = mot
- non utilisé
- digest_volume = nombre
- utilisé par digest positionne le numéro de
condensé courant.
- digest_work_dir = répertoire
- utilisé par digest pour générer ses fichiers
temporaires.
- get_access =
open|closed|list
- utilisé par majordomo pour contrôler l'accès
aux fichiers (voir get). open autorise
n'importe qui à accéder aux fichiers attachés. closed interdit tout accès. list n'autorise l'accès qu'aux membres et
seulement à ceux définis par restrict_post
si nécessaire.
- index_access = open|closed|list
- utilisé par majordomo pour contrôler l'accès à la liste des fichiers
(voir index). Les
valeurs ont la même sémantique que celle définie pour get_access.
- info_access = open|closed|list
- utilisé par majordomo pour contrôler l'accès
au fichier d'informations (voir info). Les valeurs ont la même sémantique
que celle définie pour get_access.
- intro_access = open|closed|list
- utilisé par majordomo pour contrôler l'accès
au fichier d'introduction (voir intro). Les valeurs ont la même sémantique
que celle définie pour get_access.
- maxlength = nombre
- utilisé par resend et digest permet de contrôler la taille maximale
exprimée en caractères d'un message non approuvé.
- message_footer texte
- utilisé par resend et digest pour suffixer chaque message posté sur la
liste. On peut utiliser les symboles $LIST, $SENDER et
$VERSION pour faire appraître les
informations correspondantes.
- message_fronter texte
- utilisé par resend et digest pour préfixer chaque message posté sur la
liste. Les symboles $LIST, $SENDER et $VERSION sont disponibles. Par exemple :
message_fronter << END
Message envoyé par $SENDER sur $LIST :
END
- message_header texte
- utilisé par resend et digest pour ajouter des entêtes pour chaque message
posté sur la liste. Les symboles $LIST,
$SENDER et $VERSION sont disponibles.
- moderate =
yes|no
- utilisé par resend pour déterminer si la
liste est modérée (voir listes
modérées).
- moderator = adresse
- utilisé par resend pour y renvoyer les
messages à approuver, sinon ceux-ci sont automatiquement renvoyés vers
liste-approval
(voir listes modérées).
- mungedomain = yes|no
- utilisé par majordomo pour déterminer si une
adresse est valide. Par exemple si toto@be.bop.fr est équivalent à toto@bop.fr.
- noadvertise liste-regexp
- utilisé par majordomo pour rendre invisible
la liste aux utilisateurs dont l'adresse correspond à l'une des expressions régulières.
- precedence = mot
- utilisé par resend et digest pour mettre à jour le champ Precedence utilisé pour contrôler le type de
distribution. La valeur habituelle est bulk.
- purge_received = yes|no
- utilisé par resend pour supprimer les champs
Received qui permettrait de tracer la
route d'origine.
- reply_to = adresse
- utilisé par resend et digest pour remplir le champ Reply-To. Si le symbole $SENDER est utilisé alors l'adresse de
l'envoyeur y sera placée.
- resend_host = machine
- utilisé par resend qui utilisera cette valeur
pour l'ajouter à toute adresse spécifiée en argument.
- restrict_post = liste-de-fichiers
- utilisé par resend pour spécifier l'ensemble
des personnes explicitement autorisées à poster ou réaliser certaines
opérations (voir get_access, index_access, info_access, intro_access, which_access et who_access).
- sender = adresse
- utilisé par majordomo, resend et digest pour
modifier l'adresse de l'envoyeur des messages postés.
- strip = yes|no
- utilisé par majordomo pour faire apparaître
ou non les commentaires des champs d'adresse dans la liste des
membres.
- subject_prefix = texte
- utilisé par resend pour préfixer les titres
des messages. Les symboles $LIST, $SENDER et $VERSION sont disponibles.
- subscribe_policy =
open|closed|auto[+confirm]
- utilisé par majordomo permet de contrôler la
politique d'inscription. open autorise
n'importe qui à s'inscrire lui-même. closed requiert l'approbation du gestionnaire.
auto autorise n'importe qui à inscrire
n'importe qui. +confirm permet de renvoyer
d'abord un message de confirmation à la personne inscrite (voir auth).
- taboo_body liste-regexp
- utilisé par resend permet de soumettre à
l'approbation tout courrier dont le corps correspond à l'une des expressions régulières.
- taboo_header liste-regexp
- utilisé par resend permet de soumettre à
l'approbation tout courrier dont l'un des champs d'entête correspond à
l'une des expressions régulières.
- unsubscribe_policy = open|closed|auto
- utilisé par majordomo pour contrôler la
politique de désabonnement. open permet à
chacun de se désabonner lui-même. closed
soumet toute tentative à l'approbation du gestionnaire. auto permet à quiconque de désabonner n'importe
qui.
- welcome = yes|no
- utilisé par majordomo pour envoyer ou non un
message de bienvenue (ainsi que le fichier d'introduction) après toute
inscription réussie.
- which_access = open|closed|list
- utilisé par majordomo pour contrôler l'accès
à la commande which.
La sémantique est identique à celle de get_access.
- who_access = open_closed_list
- utilisé par majordomo pour contrôler l'accès
à la commande who. La
sémantique est identique à celle de get_access.