Olá Comunidade Discourse,
Estou tentando automatizar o envio de e-mails de redefinição de senha em massa para usuários em nossa instância Discourse auto-hospedada (versão 3.5.0.beta7-dev). Os usuários estão listados em um arquivo CSV contendo apenas custom_username, e seus endereços de e-mail estão armazenados em seus perfis Discourse. Embora a redefinição manual de senha no painel de administração (/u//preferences/security) funcione perfeitamente, meu script Python usando o endpoint /u/{username}/password-reset.json falha ao enviar e-mails. Agradeceria qualquer orientação para solucionar esse problema.
O que eu fiz
- Criação de Usuário:
- Criei usuários com sucesso via endpoint POST /users.json usando um script Python. A carga útil é:
{
"email": "<email>",
"username": "<custom_username>",
"password": "",
"active": true,
"approved": true,
"send_welcome_message": false
}
* Os usuários aparecem no painel de administração (/admin/users), e seus endereços de e-mail estão corretamente armazenados em seus perfis.
- Redefinição Manual de Senha:
- No painel de administração (/u//preferences/security), clicar no botão “Redefinir Senha” envia um e-mail de redefinição de senha para o endereço de e-mail registrado do usuário, confirmando que o SMTP e o Sidekiq estão configurados corretamente.
- Redefinição Programática de Senha:
- Estou usando um script Python para enviar e-mails de redefinição de senha via POST /u/{username}/password-reset.json. O script:
- Lê
custom_usernamedo arquivoapproved_users.csv(por exemplo, kebirx-ustat45947). - Verifica se o usuário existe via GET /u/{username}.json.
- Envia uma solicitação POST para /u/{username}/password-reset.json.
- Lê
- Código simplificado:
- Estou usando um script Python para enviar e-mails de redefinição de senha via POST /u/{username}/password-reset.json. O script:
response = requests.post(
f"{FORUM_URL}/u/{username}/password-reset.json",
headers={"Api-Key": API_KEY, "Api-Username": API_USERNAME},
timeout=10
)
* A resposta é 200 OK, mas nenhum e-mail é enviado. Nenhum erro aparece nos logs do script (discourse_send_welcome_emails.log) ou nos logs do Sidekiq.
- Tentativa Anterior:
- Tentei usar POST /admin/users/{user_id}/send_welcome-email.json, mas ele retornou um erro 404. Não consegui encontrar este endpoint na documentação da API, então mudei para /u/{username}/password-reset.json.
Ambiente
- Versão do Discourse: 3.5.0.beta7-dev
- Configuração: Auto-hospedado, acessível em https://forum.kebirxai.tr
- Chave de API: Escopo de administrador com permissões completas
- Formato CSV:
custom_username
kebirx-ustat45947
keb21
- Logs:
- Os logs do script mostram 200 OK para cada chamada POST /u/{username}/password-reset.json, mas nenhum e-mail é recebido.
- Os logs do Sidekiq (/var/www/discourse/log/sidekiq.log) e os logs de produção (/var/www/discourse/log/production.log) não mostram erros relacionados a e-mail.
- E-mails de teste manuais de /admin/email funcionam bem.
Perguntas
- O endpoint /u/{username}/password-reset.json é o endpoint correto para acionar programaticamente e-mails de redefinição de senha? Se não, qual é o endpoint recomendado para e-mails de redefinição de senha em massa?
- Por que o endpoint pode retornar 200 OK, mas não enviar e-mails? Isso pode estar relacionado a permissões de API, problemas na fila do Sidekiq ou configuração de SMTP específica para e-mails acionados por API?
- Limitação de Taxa (Rate Limiting): Estou processando usuários em lotes de 25 para evitar limites de taxa. Existem limites de taxa específicos para /u/{username}/password-reset.json?
- Abordagens Alternativas: Existe uma maneira mais eficiente de acionar e-mails de redefinição de senha para vários usuários sem chamadas de API individuais? Por exemplo, um endpoint em massa ou um job do Sidekiq?
- Depuração: Quais logs ou configurações devo verificar para identificar por que os e-mails acionados por API não estão sendo enviados, apesar de as redefinições manuais funcionarem?
Notas Adicionais
- A redefinição manual do painel de administração funciona, então o SMTP (configurado em app.yml) e o Sidekiq parecem estar funcionais.
- Verifiquei que os usuários existem e seus endereços de e-mail estão corretos no painel de administração.
- Nenhum erro aparece nos logs do script ou do servidor, o que torna a depuração desafiadora.
Quaisquer sugestões sobre depuração, endpoints alternativos ou melhores práticas para e-mails de redefinição de senha em massa seriam muito apreciadas. Se houver APIs não documentadas, plugins ou ajustes de configuração, por favor, me avisem. Obrigado!