Mailman est un serveur de liste de diffusion. Une liste de diffusion ou liste de distribution (mailing list en anglais, abrégé en ML) est une utilisation spécifique du courrier électronique qui permet le publipostage d’informations aux utilisateurs qui y sont inscrits. (source Wikipédia)

Pour les besoins de Perpinux, GUL de Perpignan, j’ai du installer un serveur de messagerie iRedmail et une liste de diffusion pour tous les adhérents avec mailman.

D’abords j’ai créé un sous domaine liste.mondomaine.tld, dans bind sur mon serveur DNS.

Ensuite sur le serveur de mail j’ai installé mailman.

apt-get install mailman

A partir de là tout se passe dans la base de données mysql via phpmyadmin. En effet j’ai choisi Mysql pour la gestion d’iRedmail, ce choix se fait à l’installation du programme.

Dans phpmyadmin je me suis placé dans la base « vmail », puis dans l’onglet « SQL ». Afin que cela soit plus pratique pour les utilisateurs j’ai créé un alias pour raccourcir l’adresse de la liste de diffusion de @lite.mondomaine.tld à @mondomaine.tld.

INSERT INTO `vmail`.`domain` (`domain`, `description`, `disclaimer`, `aliases`, `mailboxes`, `maxquota`, `quota`, `transport`, `backupmx`, `defaultuserquota`, `defaultuseraliases`, `defaultpasswordscheme`, `minpasswordlength`, `maxpasswordlength`, `created`, `modified`, `expired`, `active`) VALUES ('liste.maondomaine.tld', '', '', '0', '0', '0', '0', 'mailman:', '0', '1024', '', '', '0', '0', NOW(), '0000-00-00 00:00:00', '9999-12-31 00:00:00', '1');

Maintenant il ma fallut créer tous les alias pour la liste de diffusion mailman. En effet cette liste est obligatoire pour chaque serveur mailman, même si par la suite je ne m’en servirai pas c’est la première liste à créer pour mailman.

INSERT INTO `alias` (`address`, `goto`, `name`, `moderators`, `accesspolicy`, `domain`, `created`, `modified`, `expired`, `active`) VALUES
('mailman@mondomane.tld', 'mailman@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-admin@mondomane.tld', 'mailman-admin@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-bounces@mondomane.tld', 'mailman-bounces@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-confirm@mondomane.tld', 'mailman-confirm@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-join@mondomane.tld', 'mailman-join@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-leave@mondomane.tld', 'mailman-leave@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-owner@mondomane.tld', 'mailman-owner@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-requests@mondomane.tld', 'mailman-requests@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-subscribe@mondomane.tld', 'mailman-subscribe@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-unsubscribe@mondomane.tld', 'mailman-unsubscribe@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1);

Ses commandes sont à répéter pour chaque liste de diffusion du serveur, et à adapter en du nom de la liste. Les alias créer il faut juste configurer postfix:

postconf -e 'relay_domains = liste.mondomaine.tld' postconf -e 'mailman_destination_recipient_limit = 1' /etc/init.d/postfix reload

Lors de mes premiers essais je me suis aperçu que les mails reçu mettaient plus d’une heure pour arriver sur mes boîtes. Ce problème était dû à la directive « greylist » dans le fichier /etc/postfix-policyd.conf. Pour la désactiver il suffit de la mettre à « 0 ».

Configuration de mailman :

nano /etc/mailman/mm_cfg.py
[...]
DEFAULT_URL_PATTERN = 'http://%s/'
[...]
DEFAULT_EMAIL_HOST = 'mondomaine.tld'
[...]
DEFAULT_URL_HOST = 'liste.mondomaine.tld'

Pour terminer j’ai ajouté un virtualhost à apache :

nano /etc/apache2/sites-available/mailman

ScriptAlias /cgi-bin/mailman/ /usr/lib/cgi-bin/mailman/
Alias /pipermail/ /var/lib/mailman/archives/public/
Alias /images/mailman/ /usr/share/images/mailman/
<Directory /usr/lib/cgi-bin/mailman/>
    AllowOverride None
    Options ExecCGI
    AddHandler cgi-script .cgi
    Order allow,deny
    Allow from all
    Satisfy Any
</Directory>
<Directory /var/lib/mailman/archives/public/>
    Options FollowSymlinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
<Directory /usr/share/images/mailman/>
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
<VirtualHost *:80>
    ServerName liste.mondomaine.tld
    DocumentRoot /var/www/lists
    ErrorLog /var/log/apache2/lists-error.log
    CustomLog /var/log/apache2/lists-access.log combined
    <Directory /var/lib/mailman/archives/>
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    Alias /pipermail/ /var/lib/mailman/archives/public/
    Alias /images/mailman/ /usr/share/images/mailman/
    ScriptAlias /admin /usr/lib/cgi-bin/mailman/admin
    ScriptAlias /admindb /usr/lib/cgi-bin/mailman/admindb
    ScriptAlias /confirm /usr/lib/cgi-bin/mailman/confirm
    ScriptAlias /create /usr/lib/cgi-bin/mailman/create
    ScriptAlias /edithtml /usr/lib/cgi-bin/mailman/edithtml
    ScriptAlias /listinfo /usr/lib/cgi-bin/mailman/listinfo
    ScriptAlias /options /usr/lib/cgi-bin/mailman/options
    ScriptAlias /private /usr/lib/cgi-bin/mailman/private
    ScriptAlias /rmlist /usr/lib/cgi-bin/mailman/rmlist
    ScriptAlias /roster /usr/lib/cgi-bin/mailman/roster
    ScriptAlias /subscribe /usr/lib/cgi-bin/mailman/subscribe
    ScriptAlias /mailman/ /usr/lib/cgi-bin/mailman/
    ScriptAlias / /usr/lib/cgi-bin/mailman/listinfo
</VirtualHost>

Création du répertoire « lists » pour les différentes pages web de configuration des listes du serveur, activation du virtualhost, et redémarrage d’apache pour prendre en compte les modifications.

a2ensite mailman 

mkdir /var/www/lists 

/etc/init.d/apache2 restart

Comme expliqué plus haut lors de sa première configuration mailman a besoin d’une première liste appelée « mailman. Pour terminer il suffit de démarrer mailman.

/etc/init.d/mailman start

Le serveur Mailman est désormais opérationnel. Pour créer d’autre listes de diffusions il suffit de reprendre les requêtes SQL suivantes en changeant « mailman » par le nom de votre liste.

INSERT INTO `alias` (`address`, `goto`, `name`, `moderators`, `accesspolicy`, `domain`, `created`, `modified`, `expired`, `active`) VALUES
('mailman@mondomane.tld', 'mailman@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-admin@mondomane.tld', 'mailman-admin@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-bounces@mondomane.tld', 'mailman-bounces@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-confirm@mondomane.tld', 'mailman-confirm@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-join@mondomane.tld', 'mailman-join@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-leave@mondomane.tld', 'mailman-leave@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-owner@mondomane.tld', 'mailman-owner@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-requests@mondomane.tld', 'mailman-requests@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-subscribe@mondomane.tld', 'mailman-subscribe@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('mailman-unsubscribe@mondomane.tld', 'mailman-unsubscribe@liste.mondomaine.tld', '', '', 'public', 'mondomaine.tld', NOW(), NOW(), '9999-12-31 00:00:00', 1);

Et ensuite pour l’activer :

newlist nom de la liste