[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).
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`.
> *Note 2* : en cas de changement de configuration de Sympa, il faut redémarrer Sympa **et** l'unité systemd `wwsympa` (ou Apache) à cause des process FastCGI.
Ajouter l'adresse mail du futur admin dans `/etc/sympa/sympa/sympa.conf` dans la directive `listmaster` (les adresses doivent être séparées par des virgules).
Redémarrer le service `wwsympa`.
Puis, dans l'interface web, cliquer sur « Connexion » -> « Première connexion ? » et suivre les instructions.
Sauf si votre liste est ouverte à n'importe quel expéditeur, on conseille de signer tous les messages via le paramètre `Les catégories de messages de liste qui seront signés avec DKIM. (dkim_signature_apply_on)` :
De nombreux scénarii (configurations de distribution des listes) sont proposés par défaut (cf. `/usr/share/sympa/default/scenari/`), mais il est possible de préparer un ou plusieurs scénarios pour des besoins spécifiques et récurrents en les plaçant dans `/etc/sympa/scenari/`. Voici un exemple qui supprime simplement le paramètre `quiet` afin de recevoir une notification en cas de rejet.
Plus de précisions sur la syntaxe et les options sont disponibles dans la [documentation officielle des scénarios](https://www.sympa.community/manual/customize/basics-scenarios.html).
**Attention 1 :** Si ce domaine est déjà défini comme virtuel dans Postfix, cela cassera la réception de mails sur boîtes virtuelles associées à ce domaine.
**Attention 2:** vous ne devez pas avoir d'alias local pour `bounce` car il est utilisé par Sympa pour le [VERP](https://www.sympa.community/manual/customize/bounce-management.html#verp), vérifiez notamment qu'il n'est pas utilisé dans la directive Postfix `bounce_notice_recipient`.
Où [postfix-to-sympa.pl](https://www.sympa.org/contribs/index#easy_configuration_for_postfix) est un script Perl (avec `$DEFAULT_DOMAIN` à ajuster) qui va notamment renvoyer vers les commandes Sympa `queue` et `bouncequeue`. Merci Bastien Roucaries pour ce script :)
### Configuration en mode virtuel sans domaine dédié
Si l'on utilise un même domaine pour recevoir des emails et Sympa, il va falloir gérer des sortes d'alias virtuels pour ne renvoyer vers Sympa que ce qui est nécessaire.
Donc a priori le domaine virtuel est déjà configuré dans Postfix (par exemple via LDAP), sinon on peut l'ajouter via `virtual_mailbox_domains`.
On configure un template pour les « alias virtuels » :
**Attention :** vous ne devez pas avoir d'alias virtuel pour `bounce` car il est utilisé par Sympa pour le [VERP](https://www.sympa.community/manual/customize/bounce-management.html#verp), vérifiez notamment qu'il n'est pas utilisé dans la directive Postfix `bounce_notice_recipient`.
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é).
Pour différentes raisons - notamment de délivrabilité - on veut forcer l'expéditeur avec l'adresse email de la liste. Le plus simple est de positionner le paramètre `Auteur anonyme (anonymous_sender)` qui va simplement remplacer l'entête `From:` :
~~~
anonymous_sender
~~~
Nous conseillons plutôt de régler les paramètres via le menu `Configurer la liste > DKIM/DMARC/ARC` en spécifiant le paramètre `Nouvelle adresse From (other_email)` et en ajustant `Nouveau format de nom From (phrase)` pour conserver le nom affiché par l'expéditeur :
Sympa offre la possibilité que l'option `dmarc_protection` ne s'applique que quand les domaines expéditeurs ont une politique DMARC qui échoue, mais nous conseillons de ré-écrire le `From:` dans les cas (`mode all`).
Pour plus d'infos : <https://www.sympa.community/manual/customize/dmarc-protection.html>
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
En cas de migration de Sympa (ou autre), la structure de la base de données ne sera pas à jour.
Vous aurez par exemple des erreurs du type :
~~~
wwsympa[1827142]: err main::#1557 > main::do_lists#4258 > Sympa::List::is_admin#2868 [...] ORDER BY user_admin": (42S22) Unknown column 'date_epoch_admin' in 'field list'
wwsympa[1827142]: err main::#1557 > main::do_lists#4258 > Sympa::List::is_admin#2868 DIED: Can't use an undefined value as an ARRAY reference at /usr/share/sympa/lib/Sympa/List.pm line 2868
task_manager[3617077]: err main::#148 > Sympa::Spindle::spin#78 > Sympa::Spool::next#125 > Sympa::Spool::Task::_load#57 > Sympa::Spool::Task::_create_all_tasks#103 > Sympa::List::has_included_users#5796 > Sympa::Database::do_prepared_query#382 Unable to execute SQL statement "SELECT COUNT(*) FROM subscriber_table WHERE list_subscriber = ? AND robot_subscriber = ? AND inclusion_subscriber IS NOT NULL": (42S22) Unknown column 'inclusion_subscriber' in 'where clause'
~~~
Voici comment forcer la mise à jour de Sympa 6.2.16 à 6.2.60 par exemple :
~~~
# vim /etc/sympa/data_structure.version
6.2.16
# su -l sympa -s /bin/sh -c "/usr/lib/sympa/bin/sympa.pl --upgrade"
notice main:: Sympa 6.2.60 Started
notice main:: Upgrade process...
notice main:: Upgrading from 6.2.16 to 6.2.60...
notice Sympa::DatabaseManager::_check_indexes() Index session_prev_id_index on table session_table does not exist. Adding it
notice Sympa::DatabaseManager::_check_fields() Field "password_user" (table "user_table"; database "sympa") does NOT have awaited type (varchar(64)) where type in database seems to be (varchar(40)). Attempting to change it...
notice Sympa::DatabaseDriver::MySQL::update_field() ALTER TABLE user_table CHANGE password_user password_user varchar(64)
Si vous recevez un message du type « Le mot de passe devrait être reconverti » avec comme précision : « Les mots de passe dans la base de données semblent crypté. Exécutez upgrade_sympa_password.pl pour convertir les mots de passe à nouveau. »
Cela signifie que votre table `user_table` contient des mots de passe avec un chiffrement faible.
Vous pouvez utiliser le script `upgrade_sympa_password.pl` pour convertir ces mots de passe.
~~~
MariaDB [sympa]> select count(*) from user_table where password_user LIKE 'crypt%';
+----------+
| count(*) |
+----------+
| 48036 |
+----------+
# /usr/share/sympa/bin/upgrade_sympa_password.pl
Recoding password using md5 fingerprint.
...
Found in table user 41420 passwords stored using md5. Did you run Sympa before upgrading?
Updated 48036 user passwords in table user_table using md5 hashes.
Time required to calculate new md5 hashes: 0.29 seconds 0.00001 sec/hash
MariaDB [sympa]> select count(*) from user_table where password_user LIKE 'crypt%';
Si l'on veut utiliser des [variables](https://www.sympa.community/manual/customize/message-personalization.html) de type `[% listname % ]` il faut ajouter dans la configuration globale :
Note : attention, le chemin est a changé depuis la version 6.2.43, c'est directement dans le répertoire `/etc/sympa/` et non plus dans un sous-répertoire `mail_tt2/` et certains noms de fichiers ont changé, comme proposé dans le [ticket #507](https://github.com/sympa-community/sympa/issues/507).
Il existe aussi la possibilité de mettre un footer global `/etc/sympa/message_global_footer` et `/etc/sympa/message_global_footer.mime` qui sera ajouté même si un footer personnalisé est déjà défini.