mlmmj : Un gestionnaire de mailing listes simple et léger

mlmmj pour « Mailing List Management Made Joyful » est un gestionnaire de mailing liste (ou « MLM« ) inspiré par « ezmlm » offrant les fonctionnalités courantes de ce type d’outils :

  • archivage,
  • gestion des rebonds,
  • modération,
  • modification des entêtes,
  • préfixage des sujets,
  • etc.

Contrairement aux grands noms du secteurs tels que Mailman ou le très complet Sympa, mlmmj est redoutablement léger. Il nécessite peu de dépendances et s’interface avec les principaux Mails Transferts Agents (postfix, sendmail, qmail, exim4).

Les listes créées via mlmmj sont gérées par mail.

Il nécessite peu de modifications de la configuration des MTAs et assure un service complet et suffisant pour la plupart des besoins.

Une interface php permet un accès web aux archives des listes.

Installation

Sur un serveur de mail « postfix », la bonne surprise commence dès l’installation avec une liste de dépendances (quasi) vierge (exemple sous Debian) :

12:39:56 mail ~ # aptitude install mlmmj
The following NEW packages will be installed:
  mlmmj  
0 packages upgraded, 1 newly installed, 0 to remove and 313 not upgraded.
...

Si mlmmj n’est pas disponible dans la liste des paquets de votre distribution, le passage par les sources ne présentera pas de difficulté particulière. Rendez vous sur le site du projet (http://mlmmj.org) rubrique « Downloads« , télécharger la dernière version des sources, les extraire, les compiler et installer le programme via les traditionnels « tar », « configure », « make » et « make install » :

12:46:11 mafalda src # wget http://mlmmj.org/releases/mlmmj-1.2.17.1.tar.gz
...
12:49:43 mafalda src # tar xvf mlmmj-1.2.17.1.tar.gz
...
12:49:43 mafalda src # cd mlmmj-1.2.17.1
12:50:07 mafalda mlmmj-1.2.17.1 # 
12:50:32 mafalda mlmmj-1.2.17.1 # ./configure 
...
12:51:33 mafalda mlmmj-1.2.17.1 # make
...
12:51:52 mafalda mlmmj-1.2.17.1 # make install
...

Une fois de plus, la faible quantité de dépendances facilite considérablement le travail.

Afin de « sécuriser » l’outil, choisir un utilisateur qui exécutera les traitements sur les mails destinés aux listes (au besoin créer l’utilisateur) :

13:09:04 mafalda mlmmj-1.2.17.1 # egrep "(list|mail)" /etc/passwd
mail:x:8:8:mail:/var/mail:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
13:09:10 mafalda mlmmj-1.2.17.1 # egrep "(list|mail)" /etc/group
mail:x:8:
list:x:38:

Dans notre exemple nous utiliserons « list » du groupe « list« .

Enfin choisir le répertoire qui stockera les différentes listes de diffusions (« /var/spool/mlmmj/ » par exemple) et y appliquer les droits de l’utilisateur gérant les listes :

13:27:15 mafalda ~ # chown -R list:list /var/spool/mlmmj 
13:27:20 mafalda ~ # chmod -R 2750  /var/spool/mlmmj
13:27:47 mafalda ~ # ls -ld /var/spool/mlmmj
drwxr-s--- 2 list list 6 Dec  5 12:40 /var/spool/mlmmj

Créer une mailing liste

La création d’une mailing liste commence par l’invocation de mlmmj-make-ml (« mlmmj make mailing liste ») à qui nous préciserons l’utilisateur/groupe propriétaire des listes (option « -c »), la localisation des listes (option « -s »), et le nom de la liste (option « -L »), qui donne pour la création de la liste « adminsys » :

13:15:14 mailhost ~ # mlmmj-make-ml -c list:list -L adminsys -s /var/spool/mlmmj 
Creating Directorys below /var/spool/mlmmj. Use '-s spooldir' to change
The Domain for the List? [] : admin-linux.fr
The emailaddress of the list owner? [postmaster] : FHH <fhh@admin-linux.fr>
 
For the list texts you can choose between the following languages or
give a absolute path to a directory containing the texts.
 
Available languages:
cz  da  de  en  es  fr  it  nl  ru
The path to texts for the list? [en] : fr
 
Don't forget to add this to /etc/aliases:
adminsys:  "|/usr/bin/mlmmj-recieve -L /var/spool/mlmmj/adminsys/"
 
chown -R list:list /var/spool/mlmmj/adminsys? [y/n]: y
 
If you're not starting mlmmj-maintd in daemon mode,
don't forget to add this to your crontab:
0 */2 * * * "/usr/bin/mlmmj-maintd -F -L /var/spool/mlmmj/adminsys/"
 
 ** FINAL NOTES **
1) The mailinglist directory have to be owned by the user running the 
mailserver (i.e. starting the binaries to work the list)
2) Run newaliases

Cette commande aura pour effet de créer l’arborescence nécessaire à la gestion de la mailing liste « adminsys » sous « /var/spool/mlmmj ».

La liste est prête à recevoir et traiter les mails.

Intégration dans postfix

Si vous utilisez un autre MTA que postfix, je vous renvoie aux documentations disponibles sur le site du projet (http://mlmmj.org/documentation/).

La première étape consiste à créer un alias virtuel (ou directement un alias) pour la liste nouvellement créée. Dans « main.cf » nous pouvons ajouter la consultation du fichier d’expression régulière « mailing_listes.reg » pour trouver les alias virtuels définis :

13:26:06 mailhost ~ # cat /etc/postfix/main.cf
...
# virtual_alias_maps : Alias des domaines virtuels.
#       Ré générer la liste des hash d'alias via postmap.
virtual_alias_maps = hash:/etc/postfix/aliases/virtual_aliases
        regexp:/etc/postfix/aliases/mailing_listes.reg
...

Si vous n’utilisiez pas d’alias virtuels ajoutez simplement cette directive :

13:26:06 mailhost ~ # cat /etc/postfix/main.cf
...
virtual_alias_maps = regexp:/etc/postfix/aliases/mailing_listes.reg
...

Le fichier d’alias virtuel contient une expression régulière matchant l’adresse de la liste et de ses dérivées :

18:34:41 mailhost ~ # cat /etc/postfix/aliases/mailing_listes.reg
/^(adminsys(\+.*)?)@admin-linux\.fr$/ ${1}

Ensuite, nous « routons » les mails à destination de la mailing liste vers « mlmmj » en utilisant la couche transport :

18:34:41 mailhost ~ # cat /etc/postfix/main.cf
...
# transport_maps : Définit une table de correspondance entre les adresses de destination et les serveurs
#	vers lesquels rediriger les mails. 
#	Ex : un mail à destination de Free sera directement envoyé aux serveurs Free.
#	Voir http://www.postfix.org/transport.5.html pour le format de la table.
#	Défaut : ---
transport_maps = hash:/etc/postfix/transport
	regexp:/etc/postfix/transport.reg
...

Tous comme pour « virtual_alias_map« , si l’entrée n’existe pas, la créer.

Le fichier « transport.reg » contient lui aussi une expression régulière matchant la mailing liste et leurs appliques « la méthode » de transport « mlmmj«  en lui passant le paramètre « adminsys » :

18:40:02 mailhost ~ # cat /etc/postfix/transport.reg 
/^adminsys.*$/ mlmmj:adminsys

Dernière étape : définition d’une méthode de transport nommée « mlmmj » transmettant les mails du MTA (postfix) au gestionnaire de mailing liste (mlmmj) dans « /etc/postfix/master.cf » :

18:50:39 mailhost ~ # cat /etc/postfix/master.cf 
...
mlmmj	unix	-	n	n	-	-	pipe
	flags=DORhu	user=list	argv=/usr/bin/mlmmj-recieve -F -L /var/spool/mlmmj/${nexthop}

A ce stade, l’outil est en place.

Personnaliser la liste

Préfixer les sujets

Créer un fichier nommé « prefix« , contenant la chaîne de caractère destinée à préfixer les sujets, dans le répertoire « control » de la mailing liste :

13:24:31 mailhost ~ # su list -c 'echo "[ADMIN-LINUX] " > /var/spool/mlmmj/adminsys/control/prefix'
13:24:32 mailhost ~ # ls -l /var/spool/mlmmj/adminsys/control/prefix
-rw-r--r-- 1 list list 15 Dec 18 13:24 /var/spool/mlmmj/adminsys/control/prefix
13:24:42 mailhost ~ # cat /var/spool/mlmmj/adminsys/control/prefix
[ADMIN-LINUX]

Modification des entêtes

Les entêtes personnalisées sont à inscrire dans le fichier « customheaders » du répertoire contrôle de la mailing liste :

13:33:26 mailhost ~ # su list -c 'cat << EOF > /var/spool/mlmmj/adminsys/control/customheaders
> Errors-to: adminsys-owner@admin-linux.fr
> List-Id: Mailing liste AdminSys sur Admin-Linux 
> List-Help: adminsys+help@admin-linux.fr
> List-Post: adminsys@admin-linux.fr
> List-Subscribe: adminsys+subscribe@admin-linux.fr
> List-Unsubscribe: adminsys+unsubscribe@admin-linux.fr
> Return-Path: adminsys-owner@admin-linux.fr
> Reply-To: adminsys@admin-linux.fr
> X-Loop: adminsys@admin-linux.fr
> X-Mailinglist: admin-linux
> EOF'
13:48:11 mailhost ~ # ls -l /var/spool/mlmmj/adminsys/control/customheaders
-rw-r--r-- 1 list list 405 Dec 18 13:47 /var/spool/mlmmj/adminsys/control/customheaders

Restrictions d’accès

Via le fichier « access » du répertoire « control » de la mailing liste, il est possible de contrôler les contenus et entêtes des messages. Je vous renvoie à la documentation d’mlmmj pour plus de détails sur ce point http://mlmmj.org/docs/readme-access/

Limiter les diffusions sur la liste

Pour n’autoriser QUE les personnes ayant souscrit à poster sur la liste, créer le fichier « subonlypost » dans le répertoire « control » de la liste :

14:01:43 mailhost ~ # su list -c 'touch /var/spool/mlmmj/adminsys/control/subonlypost'

Protéger les diffuseurs

Il est possible de retirer des entêtes des messages diffusés via « /rep_mailing_list/control/delheaders ». Par exemple, pour retirer les serveurs ayant fait transiter le message :

14:11:50 mailhost ~ # su list -c 'cat << EOF > /var/spool/mlmmj/adminsys/control/delheaders
Reply-To:
Received:
Message-ID:
User-Agent:
EOF'

Être prévenu quand quelqu’un s’abonne/se désabonne

14:12:25 mailhost ~ # su list -c 'touch /var/spool/mlmmj/adminsys/control/notifysub'

Adapter le chemin vers la mailing liste bien sur.

Restreindre l’accès à l’historique

Il semble logique que seul les abonnés puissent récupérer un ancien mail de la liste. Il faut cependant le préciser en créant le fichier « control/subonlyget » :

14:14:48 mailhost ~ # su list -c 'touch /var/spool/mlmmj/adminsys/control/subonlyget'

Plus encore ?

La page d’aide http://mlmmj.org/docs/tunables/ contient une liste des paramètres modifiables.

Personnaliser les échanges avec les utilisateurs

Les fichiers envoyés par mlmmj aux utilisateurs sont stockés dans le répertoire « text » de la liste de diffusion. Vous pouvez les modifier comme il vous plaira.

Références

Site du projet mlmmj : http://mlmmj.org/

4 réflexions au sujet de « mlmmj : Un gestionnaire de mailing listes simple et léger »

  1. bonjour,

    savez-vous s’il est possible de faire fonctionner mlmmj dans un seul sens, par exemple seuls quelques comptes soient autorisés à envoyer aux abonnés, pour une newsletter.

    1. Il existe de nombreuses possibilités pour paramétrer mlmmj (voir http://mlmmj.org/docs/tunables/ ). Une solution pour utiliser l’outil comme une newsletter, est de générer une liste, de la modérer et de garder l’adresse de l’expéditeur dans le champs « from ». Si quelqu’un essaye de poster sur la liste, le modérateur refusera le mail.

    1. Ok, je me suis un peu enflammé sur le « redoutablement« … Mais en comparaison avec les grands du domaine il faut avouer que « mlmmj » EST très léger… Un gestionnaire de mailing liste écrit en « C » avec peu de dépendances pardonne bien une vilaine faute non ?… j’ai corrigé… Merci.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *