Ciao Community di Discourse,
Sto cercando di automatizzare l’invio di email di reimpostazione password in blocco per gli utenti sulla nostra istanza Discourse self-hosted (versione 3.5.0.beta7-dev). Gli utenti sono elencati in un file CSV contenente solo custom_username, e i loro indirizzi email sono memorizzati nei loro profili Discourse. Mentre la reimpostazione manuale della password dal pannello di amministrazione (/u//preferences/security) funziona perfettamente, il mio script Python che utilizza l’endpoint /u/{username}/password-reset.json non riesce a inviare le email. Apprezzerei qualsiasi guida per risolvere questo problema.
Cosa ho fatto
-
Creazione Utenti:
- Ho creato con successo utenti tramite l’endpoint POST /users.json utilizzando uno script Python. Il payload è:
{ "email": "<email>", "username": "<custom_username>", "password": "", "active": true, "approved": true, "send_welcome_message": false }- Gli utenti appaiono nel pannello di amministrazione (/admin/users) e i loro indirizzi email sono memorizzati correttamente nei loro profili.
-
Reimpostazione Manuale Password:
- Dal pannello di amministrazione (/u//preferences/security), facendo clic sul pulsante “Reimposta Password” viene inviata un’email di reimpostazione password all’indirizzo email registrato dell’utente, confermando che SMTP e Sidekiq sono configurati correttamente.
-
Reimpostazione Programmatica Password:
- Sto utilizzando uno script Python per inviare email di reimpostazione password tramite POST /u/{username}/password-reset.json. Lo script:
- Legge custom_username da approved_users.csv (ad esempio, kebirx-ustat45947).
- Verifica che l’utente esista tramite GET /u/{username}.json.
- Invia una richiesta POST a /u/{username}/password-reset.json.
- Codice semplificato:
response = requests.post( f"{FORUM_URL}/u/{username}/password-reset.json", headers={"Api-Key": API_KEY, "Api-Username": API_USERNAME}, timeout=10 )- La risposta è 200 OK, ma non vengono inviate email. Non compaiono errori nei log dello script (discourse_send_welcome_emails.log) o nei log di Sidekiq.
- Sto utilizzando uno script Python per inviare email di reimpostazione password tramite POST /u/{username}/password-reset.json. Lo script:
-
Tentativo Precedente:
- Ho provato a utilizzare POST /admin/users/{user_id}/send_welcome-email.json, ma ha restituito un errore 404. Non ho trovato questo endpoint nella documentazione API, quindi sono passato a /u/{username}/password-reset.json.
Ambiente
-
Versione Discourse: 3.5.0.beta7-dev
-
Configurazione: Self-hosted, accessibile all’indirizzo https://forum.kebirxai.tr
-
API Key: Con ambito admin e permessi completi
-
Formato CSV:
custom_username kebirx-ustat45947 keb21 -
Log:
- I log dello script mostrano 200 OK per ogni chiamata POST /u/{username}/password-reset.json, ma non vengono ricevute email.
- I log di Sidekiq (/var/www/discourse/log/sidekiq.log) e i log di produzione (/var/www/discourse/log/production.log) non mostrano errori relativi alle email.
- Le email di test manuali da /admin/email funzionano correttamente.
Domande
- È /u/{username}/password-reset.json l’endpoint corretto per attivare programmaticamente le email di reimpostazione password? Se no, qual è l’endpoint consigliato per le email di reimpostazione password in blocco?
- Perché l’endpoint potrebbe restituire 200 OK ma non inviare email? Potrebbe essere correlato ai permessi API, ai problemi della coda Sidekiq o alla configurazione SMTP specifica per le email attivate tramite API?
- Rate Limiting: Sto elaborando gli utenti in batch di 25 per evitare i rate limit. Ci sono rate limit specifici per /u/{username}/password-reset.json?
- Approcci Alternativi: Esiste un modo più efficiente per attivare le email di reimpostazione password per più utenti senza chiamate API individuali? Ad esempio, un endpoint di massa o un job Sidekiq?
- Debugging: Quali log o impostazioni dovrei controllare per identificare perché le email attivate tramite API non vengono inviate, nonostante le reimpostazioni manuali funzionino?
Note Aggiuntive
- La reimpostazione manuale dal pannello di amministrazione funziona, quindi SMTP (configurato in app.yml) e Sidekiq sembrano funzionare.
- Ho verificato che gli utenti esistano e che i loro indirizzi email siano corretti nel pannello di amministrazione.
- Non compaiono errori nei log dello script o del server, il che rende il debug impegnativo.
Qualsiasi suggerimento per il debug, endpoint alternativi o best practice per le email di reimpostazione password in blocco sarebbe molto apprezzato. Se ci sono API non documentate, plugin o modifiche di configurazione, per favore fatemelo sapere. Grazie!