feat(server): 完成 F15 邮件通知(SMTP/Nodemailer)\n\n- 新增 email 服务(EMAIL_ENABLED + SMTP_* 配置)\n- 待办/审批/付款/密码重置触发可选邮件,失败降级不阻塞\n- 更新 server/README 邮件配置说明,并推进 CSV 状态为 DONE

这个提交包含在:
2026-02-09 19:07:32 +08:00
父节点 c9ac18e2e2
当前提交 38b66b01a6
共修改 9 个文件,包含 355 行新增和 2 行删除
+14 -1
查看文件
@@ -65,7 +65,20 @@ npm run seed:trialrun
- 解锁:`POST /api/users/:id/unlock`(权限:`system.users`)。
- 弱密码拦截:
- 采用 `zxcvbn` 评分,默认 `score < 2` 拒绝(返回 `VALID_001.details.password`)。
- 可通过 `WEAK_PASSWORD_CHECK_ENABLED=false` 关闭(不建议生产关闭)。
- 可通过 `WEAK_PASSWORD_CHECK_ENABLED=false` 关闭(不建议生产关闭)。
### 2.3.2 邮件通知(可选,F15)
- 默认关闭:`EMAIL_ENABLED=false`
- 开启后支持触发邮件(失败降级不阻塞主流程):
- 新待办分配(workflow.task_assigned)
- 审批结果(approved/rejected/returned)
- 付款完成(reimbursement.paid)
- 密码重置(forgot-password / reset-password)
- 需要配置 SMTP:
- `SMTP_HOST`、`SMTP_PORT`(默认 587)、`SMTP_SECURE`(465 通常为 true)
- `SMTP_USER`、`SMTP_PASS`(按 SMTP 服务要求)
- `EMAIL_FROM`(发件人地址)
- `EMAIL_BASE_URL`(可选,邮件内“查看详情”链接的站点前缀;为空则尝试使用 `APP_ORIGIN` 的第一个值)
### 2.4 启动服务
```bash