Les listes de diffusion

L'auteur de cette page est : Jean-Baptiste Yunes

Le courrier électronique

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.

Les alias

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.

Les listes de diffusion

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.

Terminologie

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.

Principes

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.

Majordomo

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.

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.

majordomo

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.

.config

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.