SMTP 通知
JumpCLI 当前使用自己的账户与产品通知链路;欢迎、密码恢复、密码变更、注册审核、账户 状态和免费测试套餐通知由 JumpCLI 产品服务发送。未来接入 Casdoor OIDC 后,认证验证码和 身份提供商侧的验证邮件由 Casdoor 管理,产品通知仍保留在 JumpCLI。
已验证的 SMTP 服务
当前生产服务器已验证 AWS SES Mail Manager SMTP:端口 587、STARTTLS、认证和 NOOP 命令均通过。发件人信封 notify@send.jumcli.com 已被服务端接受,测试过程没有投递 任何邮件。
send.jumcli.com 是专用于发信的子域名,不需要 A 记录。请在邮件服务商处继续维护该 域的发件身份、DKIM 和 SPF/DMARC 记录。
建议地址约定:
| 地址 | 用途 | 对外展示 |
|---|---|---|
notify@send.jumcli.com | 系统事务通知 | 不接收回复 |
ops@send.jumcli.com | 运营告警 | 仅内部使用 |
support@send.jumcli.com | 人工支持 | 需要接收与处理回复 |
通知触发策略
邮件必须由业务事件异步入队后投递;不能在注册、支付或生成请求中同步连接 SMTP。投递失败 应记录可审计状态并重试,超过重试上限后通知运营人员。
| 事件 | 收件人 | 是否默认发送 | 说明 |
|---|---|---|---|
| 账户注册成功 | 用户 | 是 | 欢迎邮件,账户可立即登录的路径。 |
| 注册审核通过或拒绝 | 用户 | 是 | 给出下一步登录或联系支持的入口。 |
| 密码重设、密码修改 | 用户 | 是 | 安全敏感操作必须留痕并通知本人。 |
| 账户停用或恢复 | 用户 | 是 | 运营状态变化后异步通知本人。 |
| 免费测试套餐开通或取消 | 用户 | 是 | 明确说明不产生支付义务。 |
| 支付成功、退款、开通延迟 | 用户、运营 | 尚未接入 | 以未来支付服务端回调与履约结果为准。 |
| 订阅续费或余额不足 | 用户 | 尚未接入 | 等正式套餐和通知偏好发布后启用。 |
| 出图任务失败 | 用户 | 尚未接入 | 等用户通知偏好与去重策略发布后启用。 |
| 邮件永久投递失败、支付回调验签失败、服务异常 | 运营 | 尚未接入 | 需先接入运营告警渠道,不能只依赖应用日志。 |
配置内容
为每个发送方准备:
- SMTP 主机、端口与 TLS 模式。
- 发件人名称和地址。
- 仅服务器可读取的凭据引用。
- 合理的连接和发送超时。
- 运营告警收件人和用户通知偏好。
上线前验证
- 先执行 SMTP 认证、TLS 和
NOOP检查,不在日志中输出凭据。 - 配置产品邮件投递模块后,向受控收件箱发送一封真实测试邮件。
- 检查发件人、主题、语言、SPF/DKIM、垃圾邮件归类和送达状态。
- 模拟一次暂时失败和一次永久失败,确认重试与运营告警正确触发。
- 对 Casdoor 与 JumpCLI 分别测试,不要假设一种配置会自动覆盖另一种。
当前状态
JumpCLI 已通过持久邮件队列异步处理欢迎邮件、密码重设、密码变更、注册审核结果、账户 停用/恢复,以及免费测试套餐激活/取消通知;失败会按退避策略重试,达到上限后保留永久 失败记录。支付、退款、Casdoor 认证、余额预警和正式套餐通知仍依赖对应生产集成,不应在 这些集成完成前宣称已自动投递。
安全原则
SMTP 密码必须写入秘密管理或环境配置,不能写在 Markdown、前端设置回显、工单截图或 可下载日志中。需要轮换时先准备新引用,验证通过后再撤销旧引用。
密码重设邮件同时按规范化邮箱和来源 IP 限流。通过 PASSWORD_RESET_IDENTIFIER_ATTEMPTS、PASSWORD_RESET_SOURCE_ATTEMPTS 和 PASSWORD_RESET_RATE_LIMIT_WINDOW_SECONDS 调整阈值;不要关闭这层限制,也不要按账户 是否存在返回不同的响应。