Problema ao enviar e-mails de redefinição de senha programaticamente em massa via /u/{username}/password-reset.json Categoria: Desenvolvimento (API/Plugins)

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

  1. 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.
  1. 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.
  2. 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:
      • custom_username do arquivo approved_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.
    • Código simplificado:
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.
  1. 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

  1. 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?
  2. 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?
  3. 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?
  4. 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?
  5. 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!

Eu acho que você não precisa de uma chave de API? Não tenho certeza se você pode solicitar uma senha se estiver logado.