---
categories: email
title: Howto Sympa
...

* Documentation : <https://sympa-community.github.io/manual/>
* Statut de cette page : prod / bullseye

[Sympa](http://www.sympa.org/) est un logiciel libre de gestion de listes de diffusion. Il est développé en Perl depuis plus de 20 ans par des développeurs français.
Il s'utilise avec une base de données [MySQL](HowtoMySQL) ou [PostgreSQL](HowtoPostgreSQL), et peut aller lire des données dans un annuaire [LDAP](HowtoOpenLDAP).

# Installation

Installer au préalable [Postfix](HowtoPostfix), [Apache](HowtoApache) et [MariaDB](HowtoMySQL).

~~~
# apt install sympa default-mysql-server libapache2-mod-fcgid opendkim-tools spawn-fcgi

# sympa -v
Sympa 6.2.60

# systemctl status sympa
● sympa.service - SYMPA mailing list manager
   Loaded: loaded (/lib/systemd/system/sympa.service; enabled; vendor preset: enabled)
     Docs: man:sympa_msg(8)
 Main PID: 18009 (sympa_msg.pl)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/sympa.service
           └─18009 /usr/bin/perl /usr/lib/sympa/bin/sympa_msg.pl

Nov 05 20:34:34 systemd[1]: Starting SYMPA mailing list manager...
Nov 05 20:34:35 sympa_msg[17997]: info main::_load() Configuration file read, default log level 0
Nov 05 20:34:36 sympa_msg[17997]: notice Sympa::Process::daemonize() Starting sympa/msg daemon, PID 18009
Nov 05 20:34:36 sympa_msg[18009]: notice main:: Sympa/msg 6.2.16 Started
Nov 05 20:34:36 systemd[1]: Started SYMPA mailing list manager.
~~~

Nous conseillons d'utiliser une unité [systemd](HowtoSystemd) `wwsympa.service` pour la partie web.
D'ailleurs, à partir de Debian 11, le wrapper FastCGI n'est même plus inclus pour des raisons de sécurité.
Voici l'unité à créer :

~~~ {.ini}
[Unit]
Description=WWSympa - Web interface for Sympa mailing list manager
After=syslog.target sympa.service

[Service]
Type=forking
PIDFile=/var/run/sympa/wwsympa.pid
ExecStart=/usr/bin/spawn-fcgi -F $FCGI_CHILDREN \
    -P /var/run/sympa/wwsympa.pid \
    -s /var/run/sympa/wwsympa.socket \
    -u $FCGI_USER -g $FCGI_GROUP $FCGI_OPTS -- \
    /usr/lib/cgi-bin/sympa/wwsympa.fcgi
Environment="FCGI_CHILDREN=5"
Environment="FCGI_USER=sympa"
Environment="FCGI_GROUP=sympa"
Environment="FCGI_OPTS=-M 0600 -U www-data -G www-data"
#EnvironmentFile=-/etc/default/sympa
Restart=always
#RuntimeDirectory=sympa
#RuntimeDirectoryPreserve=yes

#ProtectHome=no
##ProtectHome=tmpfs
##BindPaths=/home/sympa-arc
#
#NoNewPrivileges=yes
#UMask=0027
##ProtectSystem=full
#PrivateTmp=yes
#PrivateDevices=yes
#ProtectKernelTunables=yes
#ProtectKernelModules=yes
#ProtectControlGroups=yes
#RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
#RestrictNamespaces=yes
#LockPersonality=yes
#MemoryDenyWriteExecute=yes
#RestrictRealtime=yes
#
#SystemCallFilter=@system-service
#SystemCallErrorNumber=EPERM
#SystemCallArchitectures=native
#
#MemoryMax=1G

[Install]
WantedBy=multi-user.target
~~~

Attention, il ne faut pas mettre l'option `ProtectSystem=full` (paramètre par défaut sous Debian 10) car cela va empêcher la modification du fichier `/etc/mail/sympa/aliases`.

Et ajouter la gestion des alias Sympa dans `/etc/postfix/main.cf` :

~~~
alias_maps = hash:/etc/aliases hash:/etc/mail/sympa/aliases
alias_database = hash:/etc/aliases hash:/etc/mail/sympa/aliases
~~~

Et s'assurer d'avoir les alias de base dans `/etc/mail/sympa/aliases` :

~~~
## List aliases used for the sympa mailing-list manager
#-- SYMPA begin
## Aliases used for the sympa mailing-list manager
sympa:          "|/usr/lib/sympa/bin/queue sympa"
sympa-request:  "|/usr/lib/sympa/bin/queue sympa"
sympa-owner:    "|/usr/lib/sympa/bin/bouncequeue sympa"
listmaster:     root
#-- SYMPA end
~~~

# Configuration

Fichiers de configuration :

~~~
/etc/sympa/
├── auth.conf
├── cookie
├── cookies.history
├── create_list_templates
├── custom_actions
├── custom_conditions
├── data_sources
├── data_structure.version
├── facility
├── families
├── global_task_models
├── list_task_models
├── mail_tt2
├── scenari
├── search_filters
├── sympa
│   ├── sympa.conf
│   └── sympa.conf.bin
├── sympa.conf-smime.in
├── topics.conf
└── web_tt2
~~~

La configuration principale se trouve dans le fichier `/etc/sympa/sympa/sympa.conf`.
Voici la configuration minimum à ajuster :

~~~
domain  lists.example.com
listmaster  listmaster@lists.example.com
wwsympa_url http://lists.example.com/wws

lang    fr
~~~

> *Note 1* : pour Debian 10 ou inférieur, on indiquera `use_fast_cgi 1` pour utiliser le wrapper FastCGI avec Apache

> *Note 2* : en cas de changement de configuration de Sympa, il faut redémarrer Sympa **et** l'unité system `wwsympa` (ou Apache) à cause des process FastCGI.

## Apache

Vous devez créer un VirtualHost du type après avoir désactivé la configuration Sympa globale via `a2disconf sympa` et activé `a2enmod proxy_fcgi` :

~~~
<VirtualHost *:80 *:443>
    ServerName lists.example.com
    RedirectMatch ^/$ /wws/
    #Include /etc/apache2/ssl/sympa.conf

    Alias /static-sympa /usr/share/sympa/static_content
    <Directory /usr/share/sympa/static_content>
        Require all granted
    </Directory>

    Alias /css-sympa /var/lib/sympa/css
    <Directory /var/lib/sympa/css>
        Require all granted
    </Directory>

    Alias /pictures-sympa /var/lib/sympa/pictures
    <Directory /var/lib/sympa/pictures>
        Require all granted
    </Directory>

    <Location /wws>
        SetHandler "proxy:unix:/run/sympa/wwsympa.socket|fcgi://"
        Require all granted
    </Location>

    #RewriteEngine On
    #RewriteCond %{HTTPS} !=on
    #RewriteCond %{HTTP:X-Forwarded-Proto} !=https
    #RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R=permanent]

</VirtualHost>
~~~

On conseille bien sûr de l'activer en [HTTPS](HowtoSSL), par exemple avec [Let's Encrypt](HowtoLetsEncrypt).

> *Note* : pour Debian 10 ou inférieur, si l'on utilise le wrapper FastCGI, on utilisera plutôt :
>
> ~~~
>    <IfModule mod_fcgid.c>
>        ScriptAlias /wws /usr/lib/cgi-bin/sympa/wwsympa-wrapper.fcgi
>        <Directory /usr/lib/cgi-bin/sympa>
>            Require all granted
>        </Directory>
>    </IfModule>
> ~~~

## DKIM

Génération des clés DKIM :

~~~
# opendkim-genkey -D /etc/ssl/private/ -d lists.example.com -s sympa2018 -v
# adduser sympa ssl-cert
# chown sympa:sympa /etc/ssl/private/sympa2018.private
~~~

On active ensuite dans `/etc/sympa/sympa/sympa.conf` :

~~~
dkim_feature on
dkim_private_key_path /etc/ssl/private/sympa2018.private
dkim_signer_domain lists.example.com
dkim_selector sympa2018
~~~

On peut ainsi configurer DKIM dans les paramètres de chaque liste de diffusion.


# Plomberie

Les emails d'administration (changement de mot de passe, modération, etc.) sont envoyés à `sympa@lists.example.com`,
grâce à un alias Postfix, ils sont *pipés* vers le programme `/usr/lib/sympa/bin/queue sympa`

Les emails pour une liste de diffusion *foo* sont envoyés à `foo@lists.example.com`.
Les alias Postfix suivants les redirigent vers différents programmes :

~~~
foo: "| /usr/lib/sympa/bin/queue foo"
foo-request: "| /usr/lib/sympa/bin/queue foo-request"
foo-editor: "| /usr/lib/sympa/bin/queue foo-editor"
foo-subscribe: "| /usr/lib/sympa/bin/queue foo-subscribe"
foo-unsubscribe: "| /usr/lib/sympa/bin/queue foo-unsubscribe"
foo-owner: "| /usr/lib/sympa/bin/bouncequeue foo"
~~~

Le message passe ensuite par différentes files d'attente suivant la configuration (modération, etc.).


Voici les répertoires importants pour Sympa :

* `/var/spool/sympa/` : files d'attente (modération etc.)
* `/var/lib/sympa/arc/` : archives des listes de diffusion générées avec [MHonArc](https://www.mhonarc.org/)
* `/var/lib/sympa/list_data/` : données de configuration des listes de diffusion
* `/usr/share/sympa/bin/` et `/usr/lib/sympa/bin/` : scripts Perl et binaires
* `/usr/share/sympa/lib/` et : bibliothèques Perl
* `/usr/share/sympa/default/` : templates


# FAQ

## List::load() No such robot

J'ai des messages de ce type alors que *example.com* n'est pas/plus du tout domaine :

~~~
Nov  9 18:35:18 serveur task_manager[7285]: List::load() No such robot (virtual domain) example.com
~~~

Cela pourrait venir de tâches à nettoyer dans `/var/spool/sympa/task/`.
Au passage, vérifier en base de données qu'il n'y a pas/plus rien relatif à *example.com* dans subscriber_table, session_table, logs_table.

## Installation sous Debian 6

Sous Debian Squeeze, voici quelques manipulations nécessaires suite à l'installation :

~~~
# chown sympa:sympa /usr/lib/sympa/lib/sympa/queue
# chmod u+s /usr/lib/sympa/lib/sympa/queue
# chown root /etc/postfix/sympa.aliases
~~~

## End of script output before headers

Si vous avez des erreurs Apache du type :

~~~
[fcgid:warn] [pid 21826] (104)Connection reset by peer: [client 192.0.2.42:37006] mod_fcgid: error reading data from FastCGI server
[core:error] [pid 21826] [client 192.0.2.42:37006] End of script output before headers: wwsympa-wrapper.fcgi
~~~

[Assurez-vous](https://bugs.debian.org/682562) d'avoir activé `use_fast_cgi`.

## Prise en compte des changements de configuration

En cas de changement de configuration de Sympa, il faut redémarrer Sympa **et** Apache (à cause des process FastCGI).

## Données dans LDAP

Après avoir créé une liste, on peut configurer un annuaire LDAP en allant dans `Configurer la liste` puis `Définition des sources de données`.
Il pourra être nécessaire de cliquer sur `Mise à jour` pour mettre à jour les données LDAP.

## Unable run newaliases / Failed to remove aliases

Lors de l'ajout / suppression de listes, si vous obtenez des erreurs du type :

~~~
wwsympa[19038]: [robot lists.example.com] [user listmaster@lists.example.com] [list test] Unable run newaliases
wwsympa[19027]: Failed to remove aliases ; status 6 : Ioctl() inappropré pour un périphérique
~~~

Un contournement peut être d'utiliser directement `/usr/lib/sympa/bin/alias_manager.pl` :

~~~
# /usr/lib/sympa/bin/alias_manager.pl -h
Usage:
    alias_manager.pl add | del listname domain
~~~

## sympa_newaliases exited with status 75

Sympa lance la commande `newaliases` mais n'a souvent pas les droits pour `/etc/aliases`
On conseille donc de modifier la configuration Postfix pour « réserver `newaliases` »
à Sympa en mettant uniquement

~~~
alias_database = hash:/etc/mail/sympa/aliases
~~~

Il faut aussi voir si il n'y a pas des restrictions Systemd.

## emails d'une liste vers une autre non archivée ?

C'est probablement à cause de la présence de l'entête `X-No-Archive: yes` !

## emails non reçus par une liste ?

Voir dans `sympa.pl`, certains filtres basiques sont effectués, notamment :

~~~
if ($sender =~ /^(mailer-daemon|sympa|listserv|mailman|majordomo|smartlist|$conf_email)(\@|$)/mio) {
~~~

## Sympa : User unknown in local recipient table

En cas d'erreur "foo@sympa.example.com: Recipient address rejected: User unknown in local recipient table" il faut probablement refaire un postmap sur le fichier d'alias de Sympa :

~~~
# postmap /etc/mail/sympa/aliases
~~~

(ou plus simplement un `newaliases` si Postfix est bien configuré).

## Forcer l'adresse email expéditrice

Pour différentes raisons - notamment de délivrabilité - nous conseillons de positionner le paramètre `Auteur anonyme (anonymous_sender)`
afin de forcer l'expéditeur avec l'adresse email de la liste.

## Read-only file system

Si vous avez des messages de ce type lors de l'ajout/suppression d'une liste :

~~~
wwsympa[19928]: err main::#1566 > main::do_create_list#9792 > Sympa::Spindle::spin#95 > Sympa::Request::Handler::create_list::_twist#223 > Sympa::Aliases::Template::add#119 Unable to append to /etc/mail/sympa/aliases: Read-only file system
wwsympa[20004]: err main::#1566 > main::do_close_list#11188 > Sympa::Spindle::spin#95 > Sympa::Request::Handler::close_list::_twist#74 > Sympa::Request::Handler::close_list::_close#155 > Sympa::Aliases::Template::del#228 Could not overwrite /etc/mail/sympa/aliases: Read-only file system
~~~

C'est peut-être une restriction Systemd du type `ProtectSystem=full` (par défaut dans Debian 10).

## Attention à la casse des adresses mails

Quand on demande l'index des listes :

~~~
DIED: Can't use an undefined value as an ARRAY reference at /usr/share/sympa/lib/Sympa/List.pm line 2868.
at /usr/share/sympa/lib/Sympa/List.pm line 2868.
Sympa::List::is_admin(Sympa::List <infos@frdomaine.org>, 'privileged_owner', 'n.s@fredomainee.fr') called at /usr/lib/cgi-bin/sympa/wwsympa.fcgi line 4258
main::do_lists() called at /usr/lib/cgi-bin/sympa/wwsympa.fcgi line 1557
~~~

Vérifier que les adresses mails dans les fichiers de configurations soient écrites en minuscules.