您好,Discourse 社区,
我正在尝试为我自托管的 Discourse 实例(版本 3.5.0.beta7-dev)的用户批量自动发送密码重置邮件。用户列在一个仅包含 custom_username 的 CSV 文件中,他们的电子邮件地址存储在 Discourse 配置文件中。虽然管理员面板(/u//preferences/security)中的手动密码重置工作正常,但我的 Python 脚本在使用 /u/{username}/password-reset.json 端点时未能发送邮件。我希望您能就如何解决此问题提供指导。
我已做的操作
-
用户创建:
- 我已成功通过 POST /users.json 端点使用 Python 脚本创建了用户。载荷如下:
{ "email": "<email>", "username": "<custom_username>", "password": "", "active": true, "approved": true, "send_welcome_message": false }- 用户出现在管理员面板(/admin/users)中,并且他们的电子邮件地址已正确存储在他们的配置文件中。
-
手动密码重置:
- 从管理员面板(/u//preferences/security)点击“重置密码”按钮会将密码重置邮件发送到用户注册的电子邮件地址,这证实了 SMTP 和 Sidekiq 的配置正确。
-
程序化密码重置:
- 我正在使用 Python 脚本通过 POST /u/{username}/password-reset.json 发送密码重置邮件。该脚本:
- 从 approved_users.csv 读取
custom_username(例如,kebirx-ustat45947)。 - 通过 GET /u/{username}.json 验证用户是否存在。
- 向 /u/{username}/password-reset.json 发送 POST 请求。
- 从 approved_users.csv 读取
- 简化代码:
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 日志中未显示任何错误。
- 我正在使用 Python 脚本通过 POST /u/{username}/password-reset.json 发送密码重置邮件。该脚本:
-
先前尝试:
- 我尝试使用 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)未显示任何与电子邮件相关的错误。
- 管理员面板中的手动测试电子邮件工作正常。
问题
- /u/{username}/password-reset.json 是否为程序化触发密码重置邮件的正确端点? 如果不是,批量密码重置邮件推荐的端点是什么?
- 为什么该端点会返回 200 OK 但不发送邮件? 这是否与 API 权限、Sidekiq 队列问题或特定于 API 触发邮件的 SMTP 配置有关?
- 速率限制:我正在分批处理用户(每批 25 个)以避免速率限制。/u/{username}/password-reset.json 是否有特定的速率限制?
- 替代方法:是否有更有效的方法可以为多个用户触发密码重置邮件,而无需单独的 API 调用?例如,批量端点或 Sidekiq 作业?
- 调试:尽管手动重置有效,但我应该检查哪些日志或设置来确定为什么未发送 API 触发的邮件?
补充说明
- 管理员面板的手动重置有效,因此 SMTP(在 app.yml 中配置)和 Sidekiq 似乎功能正常。
- 我已确认用户存在并且他们在管理员面板中的电子邮件地址正确。
- 脚本或服务器日志中未显示任何错误,这使得调试变得困难。
关于故障排除、替代端点或批量密码重置邮件的最佳实践,任何建议都将不胜感激。如果有任何未记录的 API、插件或配置调整,请告知我。谢谢!