Tu gères une infolettre avec PostMark pour l’envoi et ListMonk pour gérer tes abonnés. C’est une excellente combinaison, mais ça crée un problème : quand quelqu’un se désabonne via PostMark, ListMonk n’en est pas informé automatiquement.
Résultat? Tu risques d’envoyer des courriels à des personnes qui ont demandé de ne plus en recevoir. Pas idéal pour ta délivrabilité!
Ce tutoriel explique comment synchroniser les désabonnements de PostMark avec ListMonk.
🌘 Ce dont tu as besoin
Avant de commencer, installe ces outils : - Python (3.x) - pandas (pip install pandas) - requests (pip install requests) - python-dotenv (pip install python-dotenv)
🌘 Étape 1 : Récupérer la liste des désabonnements de PostMark
Rends-toi sur le site web de PostMark et navigue vers ton serveur d’envoi, puis dans la section Suppressions.

Clique sur le bouton Export pour télécharger la liste complète. Tu vas obtenir un fichier nommé suppressions-outbound-YYYY-MM-DD.json. Ce fichier contient tous les courriels désabonnés. Une fois que tu as complété la manipulation, assures-toi de le supprimer.
🌘 Étape 2 : Créer ton fichier d’authentification
Pour que le script communique avec ListMonk, il faut les informations de connexion. Crée un fichier .env dans le même dossier que ton script et ajoute ceci :
LISTMONK_USERNAME=ton_identifiant_listmonk
LISTMONK_PASSWORD=ton_mot_de_passe_listmonk
LISTMONK_API_URL=https://ton-domaine.com/api
POSTMARK_SUPPRESSION_JSON=chemin/vers/suppressions-outbound-YYYY-MM-DD.json
Remplace les valeurs par celles de ton installation ListMonk et remplace le nom du fichier JSON téléchargé depuis PostMark.
🌘 Étape 3 : Le script de synchronisation
Crée maintenant un fichier synchroniser_desabonnements.py :
#!/usr/bin/env python
# coding: utf-8
import os
import pandas as pd
import requests
import json
import dotenv
# Chargement des variables d'environnement
dotenv.load_dotenv()
# Lecture du fichier JSON de PostMark
suppr_data = pd.read_json(os.getenv("POSTMARK_SUPPRESSION_JSON"))
# Récupération des informations de connexion ListMonk
username = os.getenv("LISTMONK_USERNAME")
password = os.getenv("LISTMONK_PASSWORD")
listmonk_api_url = os.getenv("LISTMONK_API_URL")
# Récupération de tous les abonnés ListMonk
subscribers = requests.get(
f"{listmonk_api_url}/subscribers?page=1&per_page=all",
auth=(username, password)
)
# Conversion des données en DataFrame pour faciliter la manipulation
subsc_data = pd.DataFrame(
json.loads(subscribers.content.decode("utf-8"))['data']['results']
)
# Identification des abonnés qui doivent être désabonnés
# On fait correspondre les courriels de PostMark avec ceux de ListMonk
id_a_supprimer = list(
suppr_data.merge(
subsc_data,
how="inner",
left_on="email_address",
right_on="email"
)["id"]
)
# Désabonnement des abonnés identifiés
for id in id_a_supprimer:
res = requests.put(
f"{listmonk_api_url}/subscribers/{id}/blocklist",
auth=(username, password)
)
print(f"Abonné {id} désabonné : {res.status_code}")
🌘 Comment ça fonctionne?
Voici ce que fait le script, étape par étape :
-
Chargement des variables d’environnement : Le script lit ton fichier
.envpour obtenir toutes les informations nécessaires. -
Lecture du fichier PostMark : Le script charge le fichier JSON contenant la liste des désabonnements de PostMark dans un DataFrame pandas.
-
Récupération des abonnés ListMonk : Le script fait une requête à l’API de ListMonk pour obtenir tous les abonnés actuels.
-
Correspondance des courriels : Le script utilise pandas pour trouver quels abonnés ListMonk ont le même courriel que ceux qui se sont désabonnés dans PostMark.
-
Désabonnement : Le script envoie une requête à l’API de ListMonk pour chaque abonné identifié et l’ajoute à la liste de blocage.
🌘 Étape 4 : Exécuter le script
Une fois que tout est en place, lance simplement :
python synchroniser_desabonnements.py
Tu vas voir apparaître les codes de statut HTTP pour chaque abonné désabonné. Un code 200 signifie que tout s’est bien passé!
🌘 Conseils pour l’avenir
Pour que cette synchronisation reste à jour, voici les suggestions : - Exécute ce script régulièrement (par exemple, une fois par semaine) - Télécharge toujours le dernier fichier de suppressions de PostMark avant d’exécuter le script
Et voilà! Tu as maintenant une solution élégante pour garder tes listes d’abonnés synchronisées entre PostMark et ListMonk. Tes abonnés vont apprécier que tu respectes leur choix de se désabonner!