Connexion d'une liste Sympa à une base de données

[Reprise de l’article [url]http://ouvaton.coop/Brancher-Sympa-a-une-base]

Il est désormais possible de connecter Sympa au serveur MySQL d’Ouvaton.
Cela permet, par exemple, de faire en sorte que la liste des abonnés d’une liste de diffusion Sympa soit synchronisée avec une base de données (de Wordpress, Spip, etc.) qui recueille les inscriptions (à une lettre d’infos par exemple).

Voici comment procéder :

Dans la liste Sympa, on se rend sur :

Admin -> Configurer la liste -> Sources de données
en bas de page, on va remplir la cartouche "Inclusion d’une requête SQL (include_sql_query)" de la manière suivante :

db_user : laisser vide
db_host : laisser vide
db_options : laisser vide
db_password : laisser vide
nom court pour cette source : cequevousvoulez
type de la base : mysql
serveur distant : sql01.ouvaton.coop
port utilisé : 3306
nom de la base : le_nom_de_votre_base
paramètres de connexion : laisser vide
variable d’environnement pour la connexion : laisser vide
utilisateur : le_nom_utilisateur_de_base
mot de passe de la source : le_motdepasse_de_votre_base
requête SQL : SELECT `email` FROM `table` WHERE champs = ’valeur’ (bien sûr cette requête est à adapter à votre cas)
Le répertoire où est stocké la base de données (uniquement avec DBD ::CSV) : laisser vide

Une fois le formulaire validé vous devez voir le chiffre du nombre d’abonnés à la liste.
À noter que, dans ce cas, vous ne pouvez pas supprimer les abonnés via Sympa. Il faut les supprimer dans votre base source.

Pour supprimer tous les abonnés, retourner en Admin -> Configurer la liste -> Sources de données et supprimer tout ce qui est inscrit dans la cartouche “Inclusion d’une requête SQL”.

J’utilise ma base de donnée mysql comme source pour une liste sympa.

Cela fonctionne parfaitement, mais pas comme je le pensais : au premier envoi Sympa crée une liste de diffusion, c’est parfait.

Aux envois suivants, Sympa n’efface pas la liste créée au premier envoi mais la met à jour :
- Si il y a une nouvelle adresse mail, il la rajoute
- Si une adresse a été supprimée sur la base, elle reste sur la liste

  • Si il a une adresse modifiée sur la base, l’ancienne et la nouvelle adresse sont sur la liste

Si par exemple j’ai une adresse fausse sur la base, je ne peux pas la supprimer de la liste, aussi quand je l’aurai corrigée sur la base j’aurais sur la liste l’adresse fausse et l’adresse corrigée.
Dans ma sélection SQL je prends tous les adhérents qui ont payé leur dernière cotisations dans les 3 dernières années : sur la liste, j’ajouterai automatiquement les nouveaux adhérents mais je ne supprimerai pas les plus anciens.

Comment faire pour :
-supprimer un adhérent
-regénérer une liste neuve à chaque envoi.
-vider la liste de façon accessible à un non-informaticien : Supprimer tout ce qui est inscrit dans le cartouche “Inclusion d’une requête SQL” est facile, réemplir ce cartouche pour recréer la liste l’est beaucoup moins, entrer :
SELECT email FROM adhérents LEFT JOIN cotisations ON adhérents.id_membre=cotisations.id_membre WHERE Décédé != ‘oui’ AND Catégorie != ‘Prépa’ AND Courriel <> ‘’ AND AnnéeCotisation BETWEEN ( (YEAR(NOW()))-2) AND YEAR(NOW()) group by adhérents.id_membre ORDER BY Nom ASC est très effrayant pour des non spécialistes!

Merci de votre aide,

François