プログラムによるパスワードリセットメール一括送信の問題 /u/{username}/password-reset.json 経由 カテゴリ: Development (API/Plugins)

こんにちは、Discourseコミュニティの皆様

セルフホスト型のDiscourseインスタンス(バージョン3.5.0.beta7-dev)で、ユーザーに一括でパスワードリセットメールを送信しようとしています。ユーザーはcustom_usernameのみを含むCSVファイルにリストされており、メールアドレスはDiscourseのプロフィールに保存されています。管理者パネル(/u//preferences/security)からの手動パスワードリセットは正常に機能しますが、/u/{username}/password-reset.jsonエンドポイントを使用したPythonスクリプトではメールが送信されません。この問題のトラブルシューティングに関するガイダンスをいただけると幸いです。

行ったこと

  1. ユーザー作成:
    • Pythonスクリプトを使用して、POST /users.jsonエンドポイント経由でユーザーを正常に作成しました。ペイロードは次のとおりです。
{
  "email": "<email>",
  "username": "<custom_username>",
  "password": "",
  "active": true,
  "approved": true,
  "send_welcome_message": false
}
*   ユーザーは管理者パネル(/admin/users)に表示され、メールアドレスはプロフィールに正しく保存されています。
  1. 手動パスワードリセット:
    • 管理者パネル(/u//preferences/security)から「パスワードリセット」ボタンをクリックすると、ユーザーの登録済みメールアドレスにパスワードリセットメールが送信され、SMTPとSidekiqが正しく設定されていることが確認できます。
  2. プログラムによるパスワードリセット:
    • Pythonスクリプトを使用して、POST /u/{username}/password-reset.json経由でパスワードリセットメールを送信しています。スクリプトは次のとおりです。
      • approved_users.csvからcustom_usernameを読み込みます(例: kebirx-ustat45947)。
      • GET /u/{username}.jsonを使用してユーザーが存在することを確認します。
      • POSTリクエストを/u/{username}/password-reset.jsonに送信します。
    • 簡易コード:
response = requests.post(
    f"{FORUM_URL}/u/{username}/password-reset.json",
    headers={"Api-Key": API_KEY, "Api-Username": API_USERNAME},
    timeout=10
)
*   レスポンスは200 OKですが、メールは送信されません。スクリプトログ(discourse_send_welcome_emails.log)またはSidekiqログにエラーは表示されません。
  1. 以前の試み:
    • POST /admin/users/{user_id}/send_welcome-email.jsonを使用しようとしましたが、404エラーが返されました。APIドキュメントでこのエンドポイントを見つけられなかったので、/u/{username}/password-reset.jsonに切り替えました。

環境

  • Discourseバージョン: 3.5.0.beta7-dev
  • セットアップ: セルフホスト型、https://forum.kebirxai.tr でアクセス可能
  • APIキー: 管理者スコープで全権限が付与されています
  • CSV形式:
custom_username
kebirx-ustat45947
keb21
  • ログ:
    • スクリプトログは、各POST /u/{username}/password-reset.json呼び出しに対して200 OKを示しますが、メールは受信されません。
    • Sidekiqログ(/var/www/discourse/log/sidekiq.log)および本番ログ(/var/www/discourse/log/production.log)には、メール関連のエラーは表示されません。
    • 管理者パネルからの手動テストメールは正常に機能します。

質問

  1. プログラムでパスワードリセットメールをトリガーするための正しいエンドポイントは/u/{username}/password-reset.jsonですか? もしそうでない場合、一括パスワードリセットメールの推奨エンドポイントは何ですか?
  2. エンドポイントが200 OKを返しながらメールを送信しないのはなぜですか? これはAPI権限、Sidekiqキューの問題、またはAPIトリガーメール固有のSMTP設定に関連していますか?
  3. レート制限: レート制限を回避するために、25件ずつのバッチでユーザーを処理しています。/u/{username}/password-reset.jsonに特定のレート制限はありますか?
  4. 代替アプローチ: 個別のAPI呼び出しなしで、複数のユーザーのパスワードリセットメールをトリガーするより効率的な方法はありますか?例えば、一括エンドポイントやSidekiqジョブなどです。
  5. デバッグ: 手動リセットは正常に機能しているにもかかわらず、APIトリガーメールが送信されない理由を特定するために、どのログや設定を確認すべきですか?

追加情報

  • 管理者パネルからの手動リセットは機能するため、SMTP(app.ymlで設定済み)とSidekiqは機能しているようです。
  • ユーザーが存在し、管理者パネルでメールアドレスが正しいことを確認しました。
  • スクリプトまたはサーバーログにエラーが表示されないため、デバッグが困難です。

トラブルシューティング、代替エンドポイント、または一括パスワードリセットメールのベストプラクティスに関する提案があれば、ぜひ教えてください。ドキュメント化されていないAPI、プラグイン、または設定の調整があれば、お知らせください。ありがとうございます!

「いいね!」 1

APIキーは不要だと思いますか? ログインしている場合、パスワードをリクエストできるかどうかわかりません。