Potion Bottle Icon Manuel d'alchimie du code Potion Bottle Icon

Synchroniser les désabonnements de PostMark dans ListMonk

- 508 mots - Temps de lecture estimé: 3 minutes

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.

Exporter les suppressions dans PostMark

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 :

  1. Chargement des variables d’environnement : Le script lit ton fichier .env pour obtenir toutes les informations nécessaires.

  2. Lecture du fichier PostMark : Le script charge le fichier JSON contenant la liste des désabonnements de PostMark dans un DataFrame pandas.

  3. Récupération des abonnés ListMonk : Le script fait une requête à l’API de ListMonk pour obtenir tous les abonnés actuels.

  4. 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.

  5. 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!

Shooting Stars IconConsultation ExpressShooting Stars Icon

Bénéficie d'une heure de consultation dédiée avec François pour résoudre tes défis informatiques et stratégiques. Que ce soit pour la migration vers des technologies libres, la sécurisation de tes systèmes, la documentation de tes procédures, la conception de petits systèmes ou l'automatisation de tâches, cette session intensive t'offre des solutions concrètes et un plan d'action clair.

Découvre la Consultation Express.
Abonne-toi au fil RSS pour ne rien manquer.

Étiquettes