Skill: sky-lv/public-skill (version 1.0.0)

--- name: public-skill description: "平台公邮：用于将天气、日报、报告、提醒等内容推送到用户自己的邮箱，零配置完成消息留存" version: "2.0" trigger_keywords: - 公邮 - 平台邮件 - 邮件推送 - 推送邮件 - 日报推送 - 天气推送 - 报告推送 - 提醒推送 - 通知推送 - 绑定邮箱 - 邮箱绑定 - 消息留存 - 推送到邮箱 exclude_when: - 用户需要发送给第三方收件人 - 用户需要附件、抄送、密送、HTML - 用户需要收件、检索、下载附件 - 通常应通过 email-skill 统一入口调用，而非直接调用 public-skill --- # Public Skill（平台公邮） > **定位**：平台公邮通道，用于把内容推送到**用户自己的邮箱**。 > > **推荐方式**：只有在明确只想操作平台公邮时，才直接使用本 skill。 ## 1. 能力边界 ### 支持能力 | 能力 | 状态 | |------|------| | 查询绑定邮箱（`query-bindmail`） | ✅ | | 检查绑定状态（`bind-check`） | ✅ | | 发送绑定验证码（`bind-send-code`） | ✅ | | 完成邮箱绑定（`bind-verify`） | ✅ | | 发送纯文本邮件到自己的邮箱 | ✅ | ### 不支持能力 | 能力 | 说明 | |------|------| | 发给第三方收件人（`--to`） | ❌ 仅支持发送到自己的邮箱 | | 抄送 / 密送（`--cc` / `--bcc`） | ❌ | | 附件（`--attach`） | ❌ | | HTML 邮件（`--html` / `--html-file`） | ❌ 仅支持纯文本 | | 自定义发件人（`--from`） | ❌ | | 收件 / 检索 / 下载附件 | ❌ | ## 2. 推荐流程：自动获取绑定邮箱 → 直接发信 进入 public-skill 后，**第一步必须先调用 `query-bindmail` 命令查询用户已绑定的邮箱**，再根据结果决定后续操作。 ### 步骤一：查询绑定邮箱（query-bindmail） ```bash bash <SCRIPT_PATH>/scripts/unix/email_gateway.sh query-bindmail ``` 该命令会调用 `/data/4227/forward` 接口，返回结果如下： **成功（用户已绑定邮箱）：** ```json { "success": true, "email": "[REDACTED_SECRET]", "message": "已检测到平台公邮绑定邮箱" } ``` **失败（未绑定或网关异常）：** ```json { "success": false, "error_code": 3, "message": "当前未检测到已绑定的平台公邮邮箱" } ``` ### 步骤二：根据结果决定后续操作 - 若 `success` 为 `true` → 拿到 `email` 字段，直接用该邮箱调用 `send` 发信 - 若 `success` 为 `false` → 引导用户走手动绑定流程（见第 3 节） ### 步骤三：发送邮件 拿到绑定邮箱后，使用 `--email` 参数传入发信： ```bash bash <SCRIPT_PATH>/scripts/unix/email_gateway.sh send \ --email '[REDACTED_SECRET]' \ --subject '今日日报' \ --body '这是今天的日报内容' ``` 也可以通过文件读取主题和正文： ```bash bash <SCRIPT_PATH>/scripts/unix/email_gateway.sh send \ --email '[REDACTED_SECRET]' \ --subject-file '/tmp/subject.txt' \ --body-file '/tmp/report.txt' ``` ### 完整流程图 ``` 用户请求发送邮件 │ ▼ 调用 query-bindmail │ ▼ 返回 4227 接口结果 │ ├── success=true，拿到 email ──► send --email <email> ... ──► 完成 ✅ │ └── success=false │ └── 引导用户走绑定流程（第 3 节） ``` ## 3. 手动绑定流程（仅在 4227 接口无法获取绑定邮箱时使用） 当 4227 接口未返回绑定邮箱时，需要用户手动完成以下 3 步： ### 步骤一：检查绑定状态 ```bash bash <SCRIPT_PATH>/scripts/unix/email_gateway.sh bind-check \ --email '[REDACTED_SECRET]' ``` ### 步骤二：发送验证码 ```bash bash <SCRIPT_PATH>/scripts/unix/email_gateway.sh bind-send-code \ --email '[REDACTED_SECRET]' ``` ### 步骤三：校验验证码 ```bash bash <SCRIPT_PATH>/scripts/unix/email_gateway.sh bind-verify \ --email '[REDACTED_SECRET]' \ --code '123456' ``` ### 绑定说明 - 必须严格按 `bind-check` → `bind-send-code` → `bind-verify` 顺序执行 - 绑定成功后，无需重复绑定 - `send` 会在发送前自动做绑定检查；若未绑定，会返回引导信息 ## 4. send 参数说明 | 参数 | 必填 | 说明 | |------|------|------| | `--email <email>` | 推荐 | 用户自己的邮箱地址；**推荐先通过 `query-bindmail` 获取绑定邮箱后传入**。`send` 内部也会尝试自动获取，但建议显式传入以确保明确 | | `--subject <text>` | 二选一 | 主题文本 | | `--subject-file <path>` | 二选一 | 从文件读取主题 | | `--body <text>` | 二选一 | 正文文本 | | `--body-file <path>` | 二选一 | 从文件读取正文 | | `--content_type text` | 否 | 仅支持 `text` | ### 明确不支持的参数 以下参数传入后会直接报错，并提示改走个人邮箱通道： - `--to` - `--cc` - `--bcc` - `--attach` - `--from` - `--html` - `--html-file` - `--content_type html` ## 5. 命令列表 | 命令 | 说明 | |------|------| | `query-bindmail` | 查询用户已绑定的平台公邮邮箱（调用 4227 接口），**推荐在发信前先调用** | | `bind-check` | 检查邮箱绑定状态 | | `bind-send-code` | 发送绑定验证码 | | `bind-verify` | 完成邮箱绑定 | | `send` | 给自己的邮箱发送纯文本邮件 | | `capabilities` | 查看本 skill 能力 | | `help` | 查看帮助 | ## 6. 错误处理建议 | 错误 | 处理方式 | |------|----------| | 未绑定平台公邮 | 走绑定流程 | | 传了不支持的参数 | 改用 `email-skill send --provider personal` | | 平台额度不足 | 建议改用 `email-skill send --provider auto`，由系统回退到个人邮箱 | | 网关通信异常 | 报告错误并稍后重试 | ## 7. 安全规则 1. **发送邮件失败后禁止自动重试** 2. **不要输出 Token、验证码、账号凭证等敏感信息** 3. **平台公邮只负责推送到自己的邮箱，不要拿它模拟通用 SMTP 发信** ## 8. 与 `email-skill` 的关系 - `email-skill` 是统一入口 - `public-skill` 是“结果推送到自己邮箱”场景下的平台公邮下游通道 - 架构上，平台公邮与个人邮箱是并行路径；通常由模型先根据场景决定是否选择 `public-skill` - 只有在调用方使用 `email-skill --provider auto` 且参数满足公邮条件时，路由器才会自动尝试 `public-skill` - 当平台额度不足或通道异常时，由 `email-skill` 自动回退到 `imap-smtp-email`


Security scan verdicts — ClawScan: clean | static analysis: suspicious | VirusTotal: clean | SkillSpector: clean (LOW)