Carnet Wiki

30. Abonnements à une lettre

Version 20 — 13 February — moicubitus

Il y a 4 manières de constituer la liste des destinataires d’une lettre :
-  l’internaute s’inscrit sur un formulaire public ;
-  le webmestre l’inscrit manuellement ;
-  le webmestre importe une liste d’abonnés ;
-  à partir d’une requête SQL.

Les abonnés

À partir de la page de gestion des lettres (menu Édition / Lettres d'information) il est possible d’accéder à la gestion des abonnés.

On y voit :

-  l’évolution du nombre d’abonnés au cours des derniers mois :

-  la liste des abonnés et la liste des thèmes d’abonnements accessibles au public :

-  un bloc de raccourcis permettant d’accéder à diverses pages et fonctionnalités de spip-lettres :

En cliquant sur un abonné, on accède à sa fiche, listant ses caractéristiques :

... et présentant la liste des lettres reçues :

Inscription ou désinscription via le formulaire public

Le formulaire demande :
-  le nom et le mail de l’internaute souhaitant recevoir la lettre ;
-  le format auquel celui-ci souhaite la recevoir ;
-  si plusieurs thèmes ont été définis, il propose de choisir parmi les différents thèmes.

Ce formulaire est personnalisable par CSS.

Exemple de présentation non personnalisée, et dans le cas où il n’y a qu’un seul thème :

Inscription par le webmestre, dans la partie privée

Par la page de gestion des lettres (accédée par Édition / Lettres), le webmestre peut aussi inscrire des abonnés.

Il est possible dans ce cas d’inscrire un abonné à une rubrique à laquelle aucun ’thème’ de lettre publique n’est associé.

Importer des abonnés par un fichier au format CSV

La page permet de spécifier à quelle rubrique et avec quel format les abonnements doivent se faire :

Format du fichier :
-  le fichier doit être encodé au format UTF8 (sous Windows, l’éditeur de texte Notepad++ vous permettra de voir quel est l’encodage de votre fichier, et en cas de besoin de faire la conversion vers UTF-8 en un simple clic) ;
-  les lignes doivent être du type “email”;“nom”, c’est-à-dire que dans les options d’export du fichier CSV, il faut indiquer que :

  • le séparateur doit être le point virgule ;
  • les champs doivent être entourés de guillemets.

Exemple :

"adresse1@mail.com";"Jean-Paul Bangbang"
"adresse2@mail.com";"Carole Poutou"
"adresse3@mail.com";""
...

Si un abonné est déjà inscrit avec un ’nom’, et qu’on le réimporte sans que le nom ne figure dans le fichier, il gardera son ’nom’.

Vous pouvez par exemple générer ce fichier CSV au moyen d’un squelette qui bouclera sur d’autres tables (la table AUTEURS par exemple, ou une table issue d’un autre script de mailing-list).

Adresser la lettre non aux abonnés mais aux emails issus d’une requête SQL

Cette fonctionnalité nécessite de maîtriser SPIP, PHP et SQL.

Le fichier inc/delivrer_hors_abo fournit une fonction lettres_sql_programmer_envois qui permet d’envoyer une lettre aux mails issus d’une requête sur la base de données, quelque soit la (ou les) table(s) sur laquelle cette requête porte. Cela peut être une manière d’envoyer une lettre aux abonnés de spip_lettres, mais seulement à ceux qui vérifient certains critères, mais les mails renvoyés par la requête peuvent provenir de n’importe quelle autre table de la base de données : une table spip comme spip_auteurs, ou toute autre table.

En plus de l’identifiant de la lettre qui doit être envoyée, les paramètres de cette fonction sont ceux définis par l’API SQL de SPIP telle qu’utilisée par exemple par sql_select.

La requête doit au moins renvoyer les valeurs d’un champ ’email’. La fonction n’abonne pas ces emails, mais leur envoie la lettre passée en paramètres. Si d’autres champs sont renvoyés par la requête, leur valeur peut être utilisée pour personnaliser chaque lettre en utilisant le formalisme habituel des raccourcis de personnalisation de spip-lettres : %%prenom%%, %%nom%%, %%civilite|Monsieur, Madame%%, ...

On a donc une API de 2 fonctions permettant d’envoyer la lettre à des destinataires non gérés par spip-lettres mais par un programme extérieur. une fonction reçoit une requête SQL dont les résultats lui fournissent la liste des destinataires, l’autre fonction reçoit juste un mail. Ces 2 fonctions n’envoient pas le(s) mail(s) direct mais en programment l’envoi avec job_queue. Ces 2 fonctions peuvent être utilisées dans un squelette.
Exemple :
Boucle sur sur une table perso, avec une lettre au statut ’envoyée’ :

<BOUCLE_test(mes_contacts){email like %@mondomaine.info}>
#PRENOM #NOM #EMAIL <br>
[(#VAL{5}|lettres_programmer_envoi_email{#EMAIL,#ARRAY{prenom,#PRENOM,nom,#NOM}})]<br>
</BOUCLE_test>

Envoi de la lettre (de statut indifférent) à tous les mails résultats d’une requête SQL.
Le statut de la lettre devient ’envoyée’ :

[(#VAL{"email,nom,prenom"}|sql_select{t_contacts,email like '%@domaine.com'}|sql_fetch|print_r{true})]
<br>
[(#VAL{5}|lettres_sql_programmer_envois{'email,prenom,nom',t_contacts,email like '%@domaine.com'})]

Les substitutions des %%raccourcis%% sont possibles dans la lettre pour chaque mail, selon les valeurs renvoyées par la requête SQL. Y compris pour le lien de demande de désabonnement utilisant un %%code%% de validation sur mesure.

Attention : il semble que dans certain cas il faut “tester” l’envoi de la lettre (bouton “tester” qui envoie la lettre à ses auteurs pour mise au point et validation) afin de générer la version stockée en BDD qui est utilisé pour les envois ; sinon la lettre envoyée est vide, ce que facteur signale par une erreur.

2014 :
Dans Newsletter, la trilogie de plugins spip3 qui remplace allègrement spip_lettres, une fonctionnalité équivalente est implémentée avec http://zone.spip.org/trac/spip-zone/changeset/86325
Il a 3 lignes de code a ecrire (la requete SQL => tableau) et ça synchronise automatiquement les tables du plugin avec les résultats de la requête.
La trilogie des plugins Newsletter devient donc interfaçable avec un crm ou tout autre people management application.
C’est fait par exemple dans le plugin partenaire mailsubscriber ici : http://zone.spip.org/trac/spip-zone/browser/_plugins_/mailsubscribers/trunk/inc/mailsubscribers.php#L264
C’est pas adapté à des listes de centaines de milliers d’abonnés mais ça viendra bien peut être...

Export des abonnés

Le menu de la page “Liste des abonnés” permet aussi d’exporter des abonnés à une thématique, au format CSV. Il faut spécifier la rubrique dont on veut obtenir la liste des abonnés. Si on indique la racine du site, on récupèrera tous les abonnés à toutes les thématiques.

Le menu des raccourcis de cette page permet également d’exporter les désabonnés :

Les fichiers CSV sont renvoyés au navigateur et également stockés sur le site dans le répertoire /imp/cache/export où ils peuvent être ultérieurement récupérés par FTP.