Roucoule

Envoyer tes emails#

Roucoule rend tes emails ; tu les envoies depuis ta machine via le client open-source @roucoule/send. Ce document explique comment.

Pourquoi ce design#

Installation#

Deno (JSR)#

bash
deno install -gA jsr:@roucoule/send

Node (npm)#

bash
npm install -g @roucoule/send
# ou en one-shot via npx :
npx @roucoule/send --feed-id feed_xxx art_yyy

Les deux exposent la même commande roucoule-send.

Premier envoi en 3 étapes#

  1. Crée un token API dans /me.
  2. Configure le client en lançant roucoule-send sans argument : un wizard interactif te demande l'URL Roucoule, le token, et tes identifiants SMTP. Tout est stocké dans ~/.config/roucoule/config.json (mode 0600).
  3. Prépare ton article dans l'UI Roucoule (sujet personnalisé, intro perso, clic « Marquer comme prêt à envoyer »), puis :
bash
roucoule-send --feed-id feed_xxx art_yyy

Le client fetch le package depuis Roucoule, envoie chaque email via ton SMTP, et notifie Roucoule de la complétion en remontant un résultat par destinataire.

Comment ça marche sous le capot#

Roucoule expose un endpoint stable GET /api/v1/feeds/{id}/articles/{aid}/package qui retourne tous les emails personnalisés rendus (un par destinataire actif), avec les headers List-Unsubscribe. Le client envoie via ton SMTP, puis appelle POST .../mark-sent en remontant le résultat de chaque destinataire (status: sent|failed, error?). Roucoule en dérive la liste des envois et expose les succès et les échecs dans l'UI admin. Voir docs/api pour le détail du format et des codes d'erreur.

Automatiser via GitHub Action#

Le repo @roucoule/send contient un template GitHub Action dans examples/github-action.yml. À copier dans .github/workflows/ du repo de ton blog. Tu déclenches manuellement (workflow_dispatch) en passant l'article-id en input ; les secrets SMTP vivent dans GitHub Secrets.

Pourquoi déclenchement manuel ? Roucoule te laisse personnaliser chaque article (sujet custom, intro perso) avant de marquer « prêt à envoyer ». Cette étape volontaire reste dans l'UI Roucoule ; le CI ne fait que la dernière ligne droite SMTP.

Délivrabilité#

Le SMTP utilisé doit avoir SPF, DKIM et DMARC bien configurés sur le domaine du From:. Teste avec mail-tester.com avant ton premier envoi en volume.

Écrire ton propre client#

L'API est entièrement documentée dans docs/api : token Bearer, format du package, codes d'erreur. Le contrat est stable, tu peux construire ton propre client (Python, Rust, shell + curl, n'importe).