Expériences vécues de migration de mailman vers discourse?

Bonjour,

J’ai à plusieurs reprises ces dernières années utilisé discourse en mode liste de diffusion (1, 2).

Dans le cas le plus simple, un·e utilisateur·rice se fait un compte, marque une catégorie qu’elle souhaite suivre, change ses préférences pour passer en mode « liste de diffusion » et n’intéragit ensuite que par courriel et pas du tout par l’interface web.

Dans un cas un peu moins typique, une catégorie est associée à un courriel (par exemple macategorie@forum.net) et les courriels addressés à macategorie@forum.net permettent la création d’un nouveau fil de discussion. Si une personne participe à la discussion, son courriel sera connu de discourse et elle retrouvera ses posts dans les archives après s’être créée un compte.

Du coup j’ai souvent pensé que ça pouvait permettre de migrer des listes de diffusion qui se trouvent hébergées sous sympa ou mailman. Mais je ne l’ai jamais tenté l’aventure et je suis à la recherche de gens qui auraient déjà fait ce chemin.

Les questions que je me pose en particulier sont:

En dehors de ça je ne vois pas ce qui manquerait à discourse en terme de fonctionalités (par exemple afficher publiquement les emails des abonnés n’est pas possible mais je ne suis pas certain que ce soit de toute façon une excellente idée…).

Des avis ?

1 « J'aime »

Chez ARN on a migré de mailman2 à discourse. Ca n’a pas été simple.

Les questions que tu dois tester:

  • Est-ce que quelqu’un de non inscrit peut écrire à la liste ?
  • Si oui est-ce que les réponses arriveront bien dans la boite mail de cette personne non inscrite ?
  • Que ce passe t’il si quelqu’un écrit à plusieurs listes en même temps ?

De notre côté, on avait commencé à faire des catégories privées avec des emails associés, mais on a dû migrer vers les messages privées de groupes.

Pour l’import des utilisateurs, nous n’avions pas de nom d’utilisateurs pour les participant⋅es on a donc générer des pseudos avec des noms d’animaux. Je ne m’en suis pas occupé, c’est Gyom chez nous qui l’a fait, il doit y avoir un topic dans le forum arn au sujet de discourse.

1 « J'aime »

Quelques topic qui peuvent intéresser:
https://forum.arn-fai.net/t/migration-des-categories-privees-vers-la-messagerie-interne-des-groupes/682

En ce qui concerne la charge, je ne sais pas ce que ça peut donner car on a pas 40k membres ^^

1 « J'aime »

En effet, j’ai trouvé les instructions pour utiliser le forum en mode liste de diffusion créé par Gyom.

Tu te souviens quel script vous avez utilisé pour importer les utilisateurs ? En particulier pour savoir à quelle liste ils sont abonnés et activer le suivi des catégories correspondantes en fonction. Par exemple si une utilisatrice est abonnée à une liste en mode « je ne veux rien recevoir » il ne faut pas qu’elle soit en mode « suivi » sur la catégorie discourse correspondante.

Coté import des utilisateurs, il y a peut-être quelque chose dans le dossier des scripts d’import officiels. A défaut il est possible de faire des opérations en batch. Et de modifier les options d’un ou plusieurs utilisateur ou utilisatrice. Ou bien d’utiliser le module python qui permet d’utiliser l’API discourse.

Il est possible de créer des utilisateurs à partir d’un fichier CSV qui contient

  • le courriel
  • la liste des catégories (i.e. les listes de diffusion) auquel l’utilisateur va être abonné (comment ? suivi ?)
  • la page sur laquelle l’utilisateur arrivera lorsqu’il se connectera au site après avoir accepté l’invitation

Il n’est pas possible de pre-créer la catégorie dans laquelle importer des courriels, il faut la renommer après l’import.

Il est possible de faire une catégorie qui est un mirroir d’une liste de diffusion existante, en mode lecture seule.

Je vais lacher le sujet sur ces conclusions, pour archive:

  • faire une infolettre avec discourse c’est pas possible, pas fait pour (il faut https://phplist.org ou https://mailtrain.org/ mais aucun des deux n’est vraiment formidable)
  • l’import de la base utilisateur de mailman doit être faite à la main, il n’y a pas quelque chose de tout prêt
  • l’import des courriels au format mbox est supporté nativement et ça fonctionne bien
  • discourse tient sans problème des centaines de milliers d’utilisateurs et des centaines de millers de messages sur une petite machine (4GB ram, 2 coeurs)

Du coup je penche plutôt pour une migration vers mailman3. Moins confort coté utilisateur mais moins rugueux que mailman2.

1 « J'aime »

L’expérience de migration vers mailman3 n’ayant pas aboutit, je reprends la migration vers discourse. Il s’agit donc, en plus de l’import des mbox, d’importer les utilisateurs·rices, de les activer et de faire en sorte qu’ils et elles recoivent les courriels de la catégorie associée à une liste de diffusion, si c’est ce qui avait été configuré dans mailman2.

J’envisage de faire un script python basé sur cli_import.py et importer.py de mailman3. Et d’utiliser l’API de création d’utilisateur de discourse.

Cela ne va peut-être poser des problèmes, l’API devant parfois être reverse engineer lorsque la documentation fait défaut.

Il y a des erreurs d’encodage lorsque le charset est windows-???. Par exemple:

Content-Type: text/html; charset=windows-1256

indépendament de Content-Transfer-Encoding qui peut aussi bien être

Content-Transfer-Encoding: quoted-printable

ou

Content-Transfer-Encoding: 8bit

Ce n’est pas comme si le charset était ignoré: cela fonctionne très bien avec iso-8859-1.

a

Un message a été posté sur meta.discourse, au cas ou quelqu’un soit déjà tombé sur le problème.

Le script pour injecter les utilisateurs est dans un dépôt git. Il y a probablement des choses à piocher mais c’est du hack pour l’essentiel: aucune ambition d’en faire quelque chose de réutilisable.ie du script n’est pas transposable dans un autre environnent. La partie concernant la création des utilisateurs via l’API discourse peut cependant être utile.

Certains courriels sont ont des entêtes très incomplets (pas de To:, pas de Content-Type: multipart/alternative; boundary="…" alors qu’il y a des attachements, pas de Content-Type: text/plain; charset=« iso-8859-1 », pas de Content-Transfer-Encoding: quoted-printable). Et dans ce cas l’import n’échoue pas mais le résultat est forcément un peu décevant, voir assez illisible. Je ne vois pas bien comment améliorer la situation, sauf a trouver un réparateur d’entêtes qui devine de choses.

Il ne semble pas possible de modifier le niveau de notification d’un fil de discussion en tant qu’administrateur. Il faut être l’utilisateur pour avoir accès à ce endpoint de l’API. Le endpoint pour les notifications d’une catégorie n’est pas documenté mais en reverse engineer on voit qu’il a la forme /category/{id}/notifications et prend en paramètre unique notification_level qui est un entier de 0 à 3, donc sémantique identique.

Tout bien réfléchit, je vais tenter de faire un module python propre pour faire cette migration, c’est ici que ça se passe.