Scert/doc/邮件通知配置说明.md

77 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 邮件通知配置说明
## 1. 配置目的
Scert 的证书申请、续期、部署和校验任务完成后,可以通过第三方邮件服务 API 或 SMTP 服务发送通知。Scert 只实现出站通知客户端,不实现 SMTP、IMAP、POP3 邮件服务器端;HTTP 邮件 API 和 SMTP 出站通知均已接入。
## 2. HTTP 邮件服务配置
| 配置项 | 说明 | 默认值 |
|---|---|---|
| `email_http_enabled` | 是否启用 HTTP 邮件通知 | `false` |
| `email_provider` | 第三方服务标识 | 空 |
| `email_endpoint` | 第三方服务基础地址,必须使用 HTTP 或 HTTPS | 空 |
| `email_http_path` | 请求路径 | `/api/email/send` |
| `email_http_auth_mode` | `none`、`bearer`、`hmac_sha256` 或 `session` | `none` |
| `email_http_login_path` | 会话认证模式的登录请求路径 | `/api/login` |
| `email_http_credential_ref` | 凭据引用,不填写明文 Token 或密钥 | 空 |
| `email_http_headers` | 自定义请求头 JSON 对象 | `{}` |
`email_endpoint` 与 `email_http_path` 分开保存。例如 Smail 服务可以配置基础地址为 `https://mail.example.com`,请求路径使用 `/api/email/send`。
Bearer Token 或 HMAC-SHA256 的实际密钥必须由凭据存储管理,配置文件只保存 `secret://` 等形式的引用。自定义请求头不能覆盖 `Authorization`、`Cookie`、`Origin`、`Referer`、`Content-Type`、`Accept`、`X-CSRF-Token`、`X-Scert-Signature`、`X-Scert-Request-Id` 和 `X-Scert-Timestamp` 等安全请求头。
## 3. Smail 接口适配说明
Smail 的发送接口为:
```text
POST /api/email/send
Content-Type: application/json
```
请求体沿用 Smail 的英文字段名,包括 `from`、`to`、`cc`、`bcc`、`subject`、`text`、`html` 和 `attrs`。Scert 的通知发送器应将证书任务事件转换为邮件标题、纯文本正文和 HTML 正文。
Smail 当前接口需要登录会话 Cookie、`smail_csrf` Cookie、`X-CSRF-Token` 请求头和同源 `Origin` 请求头。Scert 的 `session` 认证模式会使用凭据存储中的账号和密码调用配置的登录路径,读取登录响应中的会话 Cookie,并在发送邮件时携带会话、CSRF 和同源请求头;密码不会写入请求日志、普通配置文件或错误信息。
## 4. 通知内容配置
| 配置项 | 说明 |
|---|---|
| `email_event_mode` | `detailed` 表示发送详细事件,`unified` 表示发送统一事件 |
| `email_include_deployment_details` | 是否包含服务器部署明细 |
| `email_include_certificate_serial` | 是否包含证书序列号 |
| `email_include_management_url` | 是否包含管理后台链接 |
| `email_sender_name` | 发件人名称,默认 `Scert` |
| `email_sender_email` | 发件人地址,留空时使用超级管理员绑定邮箱 |
| `recipients` | 收件人列表;未填写时自动使用超级管理员绑定邮箱 |
## 5. 超时与重试
| 配置项 | 说明 | 默认值 |
|---|---|---|
| `email_timeout_secs` | 单次通知请求超时时间 | `10` |
| `email_retry_count` | 失败后的重试次数 | `3` |
| `email_retry_intervals_secs` | 每次重试前等待的秒数 | `30,120,600` |
重试间隔数量必须与重试次数一致。HTTP 通知发送器应将所有 2xx 响应视为请求成功,其他状态码进入重试或失败流程,并记录请求 ID 和最终错误。
## 6. 当前实现边界
当前阶段已完成邮件通知配置的保存、校验、初始化接口、CLI/Web 表单接入、HTTP 通知发送器和 SMTP 出站通知发送器。SMTP 支持 `plain`、`starttls` 和 `implicit_tls` 三种连接模式;生产环境建议使用 STARTTLS 或隐式 TLS。Smail 登录会话可通过 `session` 认证模式自动建立和刷新。
## 7. 当前开发状态补充
当前版本已经接入 HTTP 邮件通知发送器,支持以下能力:
- 按证书申请、续期、导入和部署结果生成通知事件。
- 按 Smail `/api/email/send` 接口格式发送 JSON 请求。
- 支持 `none`、`bearer`、`hmac_sha256` 和 `session` 四种 HTTP 认证模式。
- `session` 模式支持配置登录路径;收到 HTTP 401、403 或对应业务错误码时,会在重试前重新登录并使用新会话发送。
- 使用加密凭据存储读取 Bearer Token 或 HMAC 签名密钥,配置文件只保存凭据引用。
- 使用 `X-Scert-Request-Id`、`X-Scert-Timestamp` 请求头,并禁止自定义请求头覆盖安全头。
- 将所有 2xx 响应视为成功,其他响应按重试配置处理。
- 证书工作流会在任务成功、失败或部署错误后触发通知;通知发送失败会写入 Scert 日志,不覆盖原证书任务结果。
SMTP 出站通知已经接入。初始化界面和 CLI 可以配置 SMTP 主机、端口、用户名、凭据引用、连接模式和明文认证开关;SMTP 密码只保存到加密敏感信息存储,配置文件仅保存 `secret://` 凭据引用。明文连接认证默认拒绝,只有明确启用 `SMTP 明文认证` 后才允许。CLI 可使用 `scert config set-secret --key notification.smtp_password` 保存敏感值。SMTP 是出站连接,Scert 不需要开放 SMTP 入站端口。Smail 登录会话的自动适配已通过 `session` 模式接入,仍需在目标部署环境使用实际凭据进行上线前复核。