Bonjour Communauté Discourse,
J’essaie d’automatiser l’envoi d’e-mails de réinitialisation de mot de passe en masse pour les utilisateurs de notre instance Discourse auto-hébergée (version 3.5.0.beta7-dev). Les utilisateurs sont répertoriés dans un fichier CSV ne contenant que custom_username, et leurs adresses e-mail sont stockées dans leurs profils Discourse. Bien que la réinitialisation manuelle du mot de passe depuis le panneau d’administration (/u//preferences/security) fonctionne parfaitement, mon script Python utilisant le point de terminaison /u/{username}/password-reset.json ne parvient pas à envoyer d’e-mails. J’apprécierais toute aide pour résoudre ce problème.
Ce que j’ai fait
-
Création d’utilisateurs :
- J’ai créé avec succès des utilisateurs via le point de terminaison POST /users.json en utilisant un script Python. La charge utile est :
{ "email": "<email>", "username": "<custom_username>", "password": "", "active": true, "approved": true, "send_welcome_message": false }- Les utilisateurs apparaissent dans le panneau d’administration (/admin/users) et leurs adresses e-mail sont correctement stockées dans leurs profils.
-
Réinitialisation manuelle du mot de passe :
- Depuis le panneau d’administration (/u//preferences/security), cliquer sur le bouton « Réinitialiser le mot de passe » envoie un e-mail de réinitialisation de mot de passe à l’adresse e-mail enregistrée de l’utilisateur, confirmant que SMTP et Sidekiq sont correctement configurés.
-
Réinitialisation programmatique du mot de passe :
- J’utilise un script Python pour envoyer des e-mails de réinitialisation de mot de passe via POST /u/{username}/password-reset.json. Le script :
- Lit
custom_usernamedepuis approved_users.csv (par exemple, kebirx-ustat45947). - Vérifie que l’utilisateur existe via GET /u/{username}.json.
- Envoie une requête POST à /u/{username}/password-reset.json.
- Lit
- Code simplifié :
response = requests.post( f"{FORUM_URL}/u/{username}/password-reset.json", headers={"Api-Key": API_KEY, "Api-Username": API_USERNAME}, timeout=10 )- La réponse est 200 OK, mais aucun e-mail n’est envoyé. Aucune erreur n’apparaît dans les journaux du script (discourse_send_welcome_emails.log) ni dans les journaux Sidekiq.
- J’utilise un script Python pour envoyer des e-mails de réinitialisation de mot de passe via POST /u/{username}/password-reset.json. Le script :
-
Tentative précédente :
- J’ai essayé d’utiliser POST /admin/users/{user_id}/send_welcome-email.json, mais cela a renvoyé une erreur 404. Je n’ai pas trouvé ce point de terminaison dans la documentation de l’API, j’ai donc basculé vers /u/{username}/password-reset.json.
Environnement
-
Version de Discourse : 3.5.0.beta7-dev
-
Configuration : Auto-hébergé, accessible à l’adresse https://forum.kebirxai.tr
-
Clé API : Portée administrateur avec toutes les permissions
-
Format CSV :
custom_username kebirx-ustat45947 keb21 -
Journaux :
- Les journaux du script indiquent 200 OK pour chaque appel POST /u/{username}/password-reset.json, mais aucun e-mail n’est reçu.
- Les journaux Sidekiq (/var/www/discourse/log/sidekiq.log) et les journaux de production (/var/www/discourse/log/production.log) ne montrent aucune erreur liée aux e-mails.
- Les e-mails de test manuels depuis /admin/email fonctionnent bien.
Questions
- Est-ce que /u/{username}/password-reset.json est le point de terminaison correct pour déclencher programmatiquement les e-mails de réinitialisation de mot de passe ? Sinon, quel est le point de terminaison recommandé pour les e-mails de réinitialisation de mot de passe en masse ?
- Pourquoi le point de terminaison pourrait-il renvoyer 200 OK mais ne pas envoyer d’e-mails ? Cela pourrait-il être lié aux permissions de l’API, aux problèmes de file d’attente Sidekiq ou à la configuration SMTP spécifique aux e-mails déclenchés par l’API ?
- Limitation du débit : Je traite les utilisateurs par lots de 25 pour éviter les limitations de débit. Existe-t-il des limitations de débit spécifiques pour /u/{username}/password-reset.json ?
- Approches alternatives : Existe-t-il un moyen plus efficace de déclencher des e-mails de réinitialisation de mot de passe pour plusieurs utilisateurs sans appels API individuels ? Par exemple, un point de terminaison en masse ou un travail Sidekiq ?
- Débogage : Quels journaux ou paramètres dois-je vérifier pour identifier pourquoi les e-mails déclenchés par l’API ne sont pas envoyés, alors que les réinitialisations manuelles fonctionnent ?
Notes supplémentaires
- La réinitialisation manuelle depuis le panneau d’administration fonctionne, donc SMTP (configuré dans app.yml) et Sidekiq semblent fonctionnels.
- J’ai vérifié que les utilisateurs existent et que leurs adresses e-mail sont correctes dans le panneau d’administration.
- Aucune erreur n’apparaît dans les journaux du script ou du serveur, ce qui rend le débogage difficile.
Toutes suggestions de dépannage, de points de terminaison alternatifs ou de meilleures pratiques pour les e-mails de réinitialisation de mot de passe en masse seraient grandement appréciées. S’il existe des API non documentées, des plugins ou des ajustements de configuration, veuillez me le faire savoir. Merci !