Service de micro newsletter
L'histoire derrière l'arrivée de ce nouveau service
Récemment, un nouveau service a fait son apparition sur le serveur CLUB1 : Un service de newsletter personnelle à disposition des membres.
Mais saviez-vous que c'est en fait une version améliorée d'un bout de code fait maison : celui utilisé pour la newsletter officielle de CLUB1 ?
Voici la petite histoire derrière ce service...
Newsletter origins
Lorsque l'on s'est posé la question des outils de communication pour Club1, on est vite arrivés à la conclusion que la forme newsletter (infolettre) avait un gros avantage : tout le monde a une adresse email.
De plus, comme club1 dispose de ses propres serveur email, c'était l'occasion de s'en servir.
Il existe des logiciels de newsletter, comme l'ancestral PHPList ou le spirituel ListMonk. On peut par exemple trouver des instances de ce dernier chez d'autres membres du collectif CHATONS. Mais bon, ce sont des instruments de marketing dont le vocabulaire ou l'usage forcé des statistiques, ne correspondent pas spécialement avec l'ambiance que l'on recherchait.
Une autre solution possible consiste à détourner un logiciel de mailing-list en newsletter, mais ça nous semblait pas si pratique, d'autant qu'on utilisait déjà un forum pour nos discussions.
Globalement, la plupart de ces solutions logicielles nous semblaient disproportionnées vis-à-vis de notre usage (à peine une centaine d'emails à contacter, moins de 10 fois par an). Jusqu'ici, on utilisait un fichier texte contenant les emails à copier-coller dans Thunderbird.
Finalement, on se décide d'explorer une dernière option : coder nous même un petit logiciel, un « script » comme on dit en informatique, qui fournirait un service hyper basique de newsletter.
Construction d'un outil
Voici les fonctionnalitées dont on a besoin pour notre newsletter basique :
- stocker une liste d'emails
- pouvoir envoyer un email à toutes les adresses de la liste
- permettre aux gens de s'inscrire ou de se désinscrire automatiquement (sans passer par une action humaine)
Les points 1 et 2 sont assez simple à coder, ce qui est encouragant car c'est la base de toute newsletter. On (Vincent et Nicolas) entame le codage de cet outil via le langage de programmation Bash, pratique pour créer rapidement des petits outils de ce type. Voici quelques points qui font la particularité de ce projet :
- Compatibilité avec les outils POSIX
- MUI - Mail User Interface
- Détournement des fichiers
.forward
Compatibilité avec les outils POSIX
Un des points de départ de ce logiciel était de stocker les adresses email d'une façon à ce qu'il soit très facile des les exporter ou modifier. On est donc partis sur un fichier brut, dont chaque nouvelle ligne contient une adresse. Ce fichier s'appelle emails et son contenu ressemble à ça :
macron@gouv.fr
alice@free.fr
microsoft@gmail.com
Comme ça, si on veut modifier la liste, on peut l'ouvrir avec un éditeur de texte. Ça devient aussi très facile d'interagir avec les commandes POSIX.
Par exemple, on peut compter le nombre d'adresses inscrites avec :
wc -l emails
wc signifie « Word Count », soit « compter les mots » et -l veut dire « lines », soit : « compte les lignes aux lieu des mots ».
MUI - Mail User Interface
Vous connaissiez peut-être déjà les GUI pour Graphical User Interface (quand on utilise un écran et une souris pour cliquer sur des boutons), ou encore les TUI pour Terminal User Interface, les interface utilisant le terminal.
Pour ce projet, nous avons fait le choix d'une MUI (Mail User Interface). Une interface de logiciel qui se fait uniquement à travers les Email. Bon, en vrai, ce terme n'existe pas vraiment. Mais c'est totalement l'idée : L'inscription, la désincription et l'envoi de newsletter peut se faire par email, sans avoir besoin d'ouvrir la moindre page Web.
Détournement des fichiers .forward
En explorant les façons un peu « à l'ancienne » d'utiliser un serveur, on était tombés sur une fonctionnalité à fort potentiel créatif : les fichiers .forward. Ces fichiers permettent de faire des transferts automatiques d'un email reçu sur sa boîte CLUB1 vers une ou plusieurs adresses. Il faut le créer dans son espace perso, et indiquer à l'intérieur une liste d'emails (ça vous rappelle quelquechose ?).
Mais le truc stylé, c'est qu'on peut combiner ce type de fichier avec les sous-adresses ! Quezako ? Une sous-adresse, c'est aussi une arcane oubliée de l'email. Ça correspond à une partie optionnelle après un caractère + et avant le fameux @ dans son addresse email. Ça peut servir à organiser ses emails entrants, par exemple, en faisant en sorte qu'ils arrivent dans un dossier spécifique (c'est le cas sur le serveur CLUB1).
Par exemple :
johanna+mozza@club1.frest une sous-adresse dejohanna@club1.fr
Le fait est que si on crée .forward+mozza, il va cette fois rediriger uniquement les emails de la sous-adresse vers une nouvelle sélection de destinataires.
Mais là où ça devient encore plus fou (et que ça va rejoindre notre sujet principal), c'est qu'au lieu de rediriger vers d'autres emails, on peut diriger l'email reçu vers un programme ! Et c'est ce que l'on va utiliser pour notre MUI.
.forward+subscribe
.forward+unsubscribe
En créant ces deux fichiers et en les redirigant chacun vers un programe qui ajoute ou retire l'email à la liste, on commence à avoir la fameuse fonctionnalitée d'inscription et de désinscription.
Ces programmes ne seront pas très complexes : ils devront identifier l'adresse d'origine, le From: et l'ajouter à la fin de notre fichier ou l'en retirer.
D'ailleurs, en parlant de fichier texte, un email, c'est en fait à peu près ça :
Subject: Coucou les amix
From: Choupichou <choupi@chou.fr>
To: vincent <vincent@club1.fr>
Date: Mon, 4 May 2026 16:08:29 +0200
Salut tout le monde ! Vive la vie !!!
Voir la documentation CLUB1 pour en savoir plus sur l'usage des sous-adresses et des transferts automatiques.
Ré-écriture
Malheureusement pour les fans de Bash, à un moment, on a choisi de ré-écrire le script dans un autre langage de programmation, le Go.
C'est un truc qui peut arriver dans la vie d'un logiciel, se faire traduire dans une autre langue. Comme pour les langages humains, les langages informatique ont chacun leurs spécificités et sont plus où moins difficiles à apprendre en fonction d'où l'on vient. Une des forces de Bash est de pouvoir très vite obtenir le résultat voulu en utilisant les interface en CLI d'autres programmes. Cependant, en voulant ajouter la fonction d'envoi de la newsletter par email, il nous fallait un outil capable d'analyser les différents encodages du contenu de l'email. Malheureusement, on a pas trouvé de programme en CLI permettant de faire ça. De plus, Go est aussi un language que Nicolas apprécie et connait bien (ce qui est important !).
Si vous souhaitez étudier le code, voici les répertoires de code source :
- newsletter la version originale en Bash
- newsletter-go la version ré-écrite en Go (👈️ utilisée actuellement)
Extension aux membres de CLUB1
En fait, dès le début, on se disait que ce programme pourrait ensuite être facilement transposé en un service pour les membres de club1. La question d'un tel service avait été évoquée par des membres, souvent dans le but d'avoir une alternative à Instagram ou Facebook pour leurs communications.
Le programme comportait des parties de textes comme : « recevoir la newsletter de club1 », qu'il a fallu replacer par du texte généré en fonction des choix des membres. Un fichier de configuration permet maintenant de définir le nom de la newsletter, sa signature et la langue utilisée (anglais ou français). Ce fichier est situé dans le dossier standard ~/.config/newsletter. (~ correspond au dossier personnel)
Activation
Si l'activation de la newsletter ne peut se faire qu'à travers le terminal une fois connecté en SSH, on a essayé de rendre cette étape la plus agréable possible. Pour ça on a ajouté une commande newsletter setup qui déclenche un formulaire interactif. Cette commande se charge de créer les fichiers .forward nécessaires et va mettre à jour les fichiers de configuration. Voici à quoi ressemble le formulaire d'activation :
Inscription/désinscription
On peut s'inscrire à la newsletter d'un·e membre en contactant l'adresse ID+subscribe@club1.fr depuis l'adresse email que l'on souhaite inscrire (en remplaçant ID par l'identifiant de compte club1). Il est obligatoire de répondre à un email ensuite pour confirmer l'inscription. La désinscription se fait également par email, cette fois avec ID+unsubscribe@club1.fr. Cette dernière sera toujours indiquée dans la signature de chaque newsletter.
Envoi
L'envoi peut se faire de deux façons :
- Par email évidement ! En envoyant un email à
ID+send@club1.fr. Un email de prévisualisation sera envoyé, si on est satisfait, il faut répondre à cet email pour déclencher l'envoi final. - Via le terminal, une fois connecté en SSH au serveur.
newsletter send
Cette commande prend comme premier argument le titre de la newsletter, puis en second le fichier qui contient le contenu (Il est aussi possible de fournir le contenu via STDIN 🤩).
Enjeu de réputation
Envoyer plein de fois le même email à plein d'adresses sur d'autres serveurs est la pire chose que peut faire un serveur mail pour avoir une bonne réputation.
La plupart des entitées qui proposent un tel services disposent de plusieurs « adresse IP de sortie », leur permettant de rediriger les flux de mails sortant si la réputation de l'une d'elle est compromise. La réputation est généralement analysée en temps réel pour détecter la moindre baisse de réputation. Pour bien faire, il est souvent conseillé d'avoir une personne dédiée à la maintenance d'un service mail, pour ensuite contacter les autres serveurs lorsqu'une de ses IPs est blacklistée.
Tout ça pour dire que c'est totalement l'inverse de la situation de club1 : un seul serveur et pas de personne salariée pour faire ce boulot. Autant dire que notre réputation peut chuter à tout moment si le service de newsletter est utilisé n'importe comment (en gros pour envoyer du SPAM). Mais comme il n'y a pas d'inscription automatisée au serveur (il faut passer par la rencontre d'autres membres), on peut se faire confiance entre membres pour ne pas envoyer trop de bêtises !
Reste les cas des piratages de compte, donnant accès aux attaquants à l'envoi d'email, comme a pu nous le démontrer l'indicent 005. Heureusement, nous avons depuis mis en placce un quota d'envoi de 500 emails par jour (voir la discussion sur le forum à ce sujet). L'envoi de la newsletter n'est pas affecté par cette limite qui concerne uniquement les envois par SMTP.
Usage en dehors de CLUB1
Pourquoi ne pas voir plus loin et imaginer que ce code puisse servir à d'autres serveurs ? En réalité, c'est déjà le cas ! En étendant le code aux membres de club1, l'outil est en même temps devenu utilisable par tout autre entité qui voudrait l'installer sur son serveur. L'usage, ainsi que la modification du logiciel est permis par la license AGPL v3 (code source). Et pas seulement en français car la langue est paramétrable pour chaque utilisataire entre anglais et français (et il est possible d'ajouter des traductions).
Cependant, l'usage est limité aux configurations proches du serveur club1, comme les « serveurs tildes ». Ce qui est finalement très peu le cas parmi les CHATONS.