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!

1 curtida

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.