📧 邮箱设置
Admin 管理员配置 SMTP 服务器参数和邮件通知类型开关。页面包含 SMTP 配置表单(主机/端口/用户/密码/发件人/SSL)和通知类型 Toggle 列表(6种事件)。
路由:/email-settings
页面初始化触发
1. 进入页面 → GET /admin/email-config
触发条件:组件首次挂载(useEffect 依赖为空数组)
GET
/admin/email-config
✅ 页面加载时自动触发(loading spinner 期间)
请求头:Authorization: Bearer {token}
响应:
{
smtp: { host, port, secure, user, pass, from },
notificationTypes: {
user_register, user_login, bill_share,
payment_success, payment_failed, ai_api_error
}
}
副作用:设置 loading=false,渲染表单
表单编辑(纯前端状态)
表单状态:SMTP 配置和通知类型 Toggle 的修改均在前端 state 管理,修改时不发送请求,仅在点击"保存配置"或"保存并测试"时才提交。
2. 修改 SMTP 字段 → 前端 state 更新
触发条件:修改任何 SMTP 输入框(host/port/user/pass/from)或 SSL checkbox
setSmtp({ ...smtp, [field]: value })- 无请求
3. 修改通知类型 Toggle → 前端 state 更新
触发条件:切换任意通知类型的 Toggle 开关
setNotificationTypes({ ...notificationTypes, [key]: checked })- 无请求
保存操作
4. 点击"保存配置" → PUT /admin/email-config
触发条件:点击"保存配置"按钮(saving 时禁用)
PUT
/admin/email-config
✅ 点击"保存配置"按钮触发
请求头:Authorization: Bearer {token}
| 参数 | 类型 | 说明 |
|---|---|---|
smtp.host | string | SMTP 主机地址 |
smtp.port | integer | 端口(默认 587) |
smtp.secure | boolean | 是否使用 SSL/TLS(465 填 true,587 填 false) |
smtp.user | string | 用户名 |
smtp.pass | string | 密码/授权码 |
smtp.from | string | 发件人地址 |
notificationTypes.user_register | boolean | 用户注册通知 |
notificationTypes.user_login | boolean | 用户登录通知 |
notificationTypes.bill_share | boolean | 账单共享通知 |
notificationTypes.payment_success | boolean | 支付成功通知 |
notificationTypes.payment_failed | boolean | 支付失败通知 |
notificationTypes.ai_api_error | boolean | AI API 异常通知 |
副作用:成功 → 显示绿色成功提示,3秒后自动消失
5. 点击"保存并测试" → PUT /admin/email-config
触发条件:点击"保存并测试"按钮(saving/testing 时禁用)
PUT
/admin/email-config
✅ 点击"保存并测试"按钮触发(与保存配置相同请求)
Body:同上(完整 smtp + notificationTypes)
副作用:显示提示"配置已保存!测试邮件功能待实现。"(后端尚未实现独立测试接口)
消息提示
6. 操作结果反馈
触发条件:保存或测试请求返回后
- 成功:显示绿色提示 + CheckCircle 图标,3秒后自动清空
- 失败:显示红色提示 + XCircle 图标 + 错误信息
通知类型一览
| Key | 显示名 | 说明 |
|---|---|---|
user_register | 用户注册 | 新用户注册时发送邮件通知 |
user_login | 用户登录 | 用户登录时发送邮件通知 |
bill_share | 账单共享 | 账单被共享/邀请成员时发送邮件 |
payment_success | 支付成功 | 充值/订阅支付成功时发送邮件 |
payment_failed | 支付失败 | 充值/订阅支付失败时发送邮件 |
ai_api_error | API 异常 | AI API 调用异常时通知管理员 |