Linux:Listes de diffusion avec Mailman et Postfix

Un article de Djjnet.

Sommaire

Installer mailman

apt-get install mailman

Configurer mailman

Modifier le fichier /etc/mailman/mm_cfg.py :

# Liste mailman :
MAILMAN_SITE_LIST = 'mailman'
# Domaine par défaut pour les listes créées :
DEFAULT_EMAIL_HOST = 'dj-j.net'
# Site par défaut pour les listes créées :
DEFAULT_URL_HOST   = 'mailman.dj-j.net'
# Valider les paramètres par défaut :
add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
#Langue par défaut :
DEFAULT_SERVER_LANGUAGE = 'fr'
# Lien avec postfix :
MTA='Postfix'
# Listes virtuelles pour gérer plusieurs domaines :
# Liste des domaines gérés :
POSTFIX_STYLE_VIRTUAL_DOMAINS = ['dj-j.net','dj-j.org']
# Association en les sites web (apache) et les domaines :
VIRTUAL_HOSTS = { 'mailman.dj-j.net': 'dj-j.net' ,
                 'listes.dj-j.org': 'dj-j.org'
               }

Paramétrer la liste système mailman

newlist mailman
config_list -i /var/lib/mailman/data/sitelist.cfg mailman

Définir les mots de passes principaux

Mot de passe global qui a accès à tout :

mmsitepass <your-site-password>

Mot de passe qui permet de créer des listes :

mmsitepass -c <list-creator-password>

Vérifier les droits des dossiers

/var/lib/mailman/bin/check_perms -f

Paramétrer postfix

Dans le fichier main.cf :

  • ajouter :
unknown_local_recipient_reject_code = 550
  • modifier ainsi pour les alias et les virtuels :
alias_maps = hash:/etc/aliases hash:/var/lib/mailman/data/aliases
alias_database = hash:/etc/aliases hash:/var/lib/mailman/data/aliases
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf hash:/var/lib/mailman/data/virtual-mailman

Dans mon cas d'utilisation avec mon serveur de mail complet Linux:Serveur_de_mail_avec_CyrusImap_Sieve_Postfix_Clamav_Dspam J'ai besoin d'interroger dans une base mysql l'existence des adresses emails, donc j'ajoute une tâche planifiée pour mettre à jour une table SQL :

Fichier /etc/cron.hourly/updatelist

#!/bin/bash
for addr in $(grep '^[^$,#]' /var/lib/mailman/data/virtual-mailman|awk '{ print $1 }')
do
	mysql --defaults-file=/etc/mysql/debian.cnf mail -e "REPLACE lists_mailman (address) VALUES ('${addr}');"
done

Créer la table :

use mail
CREATE TABLE `lists_mailman` (`address` char(50) NOT NULL, PRIMARY KEY  (`address`));

Paramétrage d'apache

<Directory /usr/lib/cgi-bin/mailman>
   AllowOverride All
   Options MultiViews -Indexes Includes FollowSymLinks
       <IfModule mod_access.c>
           Order allow,deny
           Allow from all
       </IfModule>
</Directory>
<Directory /var/lib/mailman/archives/public>
   AllowOverride All
   Options MultiViews -Indexes Includes FollowSymLinks
       <IfModule mod_access.c>
           Order allow,deny
           Allow from all
       </IfModule>
</Directory>
<Directory /usr/share/images/mailman>
   AllowOverride All
   Options MultiViews -Indexes Includes FollowSymLinks
       <IfModule mod_access.c>
           Order allow,deny
           Allow from all
       </IfModule>
</Directory>
<VirtualHost *:80>
   ServerAdmin webmaster@dj-j.net
   ServerName mailman.dj-j.net
   ServerAlias listes.dj-j.org
   ScriptAlias /mailman/ /usr/lib/cgi-bin/mailman/
   Alias /pipermail/ /var/lib/mailman/archives/public/
   Alias /images/mailman/ /usr/share/images/mailman/
   ErrorLog /var/log/apache2/mailman.dj-j.net-error_log
   CustomLog /var/log/apache2/mailman.dj-j.net-access_log combined
</VirtualHost>