当用户提到邮箱相关能力时,进入这个skill,统一邮件入口(纯路由层):识别用户意图后路由到 public-skill 或 imap-smtp-email,自身不执行任何脚本
---
name: email-skill
description: "当用户提到邮箱相关能力时,进入这个skill,统一邮件入口(纯路由层):识别用户意图后路由到 public-skill 或 imap-smtp-email,自身不执行任何脚本"
version: "3.0"
trigger_keywords:
- 发邮件
- 发送邮件
- 写邮件
- 邮箱
- email
- send email
- 收邮件
- 查邮件
- 检查邮箱
- 收件箱
- inbox
- 搜索邮件
- 查找邮件
- 下载附件
- 邮件附件
- 绑定邮箱
- 邮箱绑定
- 日报推送
- 天气推送
- 报告推送
- 提醒推送
- 邮件通知
- 邮件推送
- 推送到邮箱
- 消息留存
exclude_when:
- 操作与邮件完全无关(如日历、文件管理、聊天)
- 用户要求发送短信或站内信(非邮件渠道)
---
# Email Skill(统一邮件入口 / 纯路由层)
> **定位**:`email-skill` 是所有邮件需求的唯一入口。它**只做意图识别和路由分发**,不执行任何脚本,不调用任何接口。识别用户意图后,直接将任务交给下游 skill 执行。
## 1. 架构总览
| Skill | 角色 | 说明 |
|-------|------|------|
| **email-skill**(本 skill) | 统一入口 / 纯路由层 | 识别意图 → 路由到下游 skill,自身不执行任何操作 |
| **public-skill** | 平台公邮通道 | 零配置,把内容推送到用户自己的邮箱(纯文本) |
| **imap-smtp-email** | 个人邮箱通道 | 需配置,支持完整 IMAP/SMTP 邮件收发能力 |
```
用户邮件需求
│
▼
email-skill(意图识别)
│
├── 推送到自己邮箱 / 绑定公邮 ──► public-skill
│
└── 完整邮件收发 ──► imap-smtp-email
```
## 2. 路由规则
### 2.1 核心原则:先理解场景,再选路径
**不要**先检查公邮是否可用再决定路径。**应该**先理解用户要解决什么问题,再选择对应的 skill。
### 2.2 路由到 `public-skill` 的条件
同时满足以下**所有**条件时,路由到 `public-skill`:
- 发送对象是**用户自己**(没有第三方收件人)
- 内容是**纯文本**(不需要 HTML)
- 不需要**附件、抄送、密送**
- 不需要**收件、检索、下载附件**
- 场景属于"结果推送 / 消息留存"类(天气、日报、报告、提醒等)
### 2.3 路由到 `imap-smtp-email` 的条件
出现以下**任一**信号,直接路由到 `imap-smtp-email`:
- 需要发给第三方收件人
- 需要抄送(cc)或密送(bcc)
- 需要附件
- 需要 HTML 邮件
- 需要收件箱查询、搜索、拉取详情、下载附件
- 需要标记已读/未读、列出邮箱文件夹
- 用户明确说"发给别人""带附件""查收件箱""下载附件""正式邮件""抄送某人"
- 平台公邮不可用,需要兜底发送
### 2.4 快速判断表
| 用户意图信号 | 路由目标 |
|-------------|---------|
| "发到我的邮箱""推送到我邮箱" | `public-skill` |
| "天气/日报/报告 发到我邮箱" | `public-skill` |
| "绑定邮箱""绑定公邮" | `public-skill` |
| "发给 xxx@example.com" | `imap-smtp-email` |
| "抄送""密送" | `imap-smtp-email` |
| "带附件""发 PDF" | `imap-smtp-email` |
| "HTML 邮件""富文本" | `imap-smtp-email` |
| "查收件箱""搜索邮件""最近的邮件" | `imap-smtp-email` |
| "下载附件" | `imap-smtp-email` |
| "配置邮箱""设置个人邮箱" | `imap-smtp-email` |
## 3. 两条路径的能力对比
| 能力 | public-skill | imap-smtp-email |
|------|:------------:|:---------------:|
| 发送到自己的邮箱 | ✅ | ✅ |
| 发给第三方收件人 | ❌ | ✅ |
| 抄送 / 密送 | ❌ | ✅ |
| 附件 | ❌ | ✅ |
| HTML 邮件 | ❌ | ✅ |
| 收件 / 搜索 / 下载附件 | ❌ | ✅ |
| 零配置 | ✅ | ❌ |
| 需要授权码/密码 | ❌ | ✅ |
## 4. 场景示例
### 路由到 `public-skill` 的场景
| 用户需求 | 原因 |
|---------|------|
| "查一下深圳明天天气,发到我邮箱" | 结果推送到自己邮箱,纯文本,零配置 |
| "每天下班把日报推到我邮箱" | 只发给自己,消息留存 |
| "把这段总结发到我的邮箱保存" | 推送到自己邮箱做留存 |
| "帮我绑定邮箱" | 公邮绑定流程 |
### 路由到 `imap-smtp-email` 的场景
| 用户需求 | 原因 |
|---------|------|
| "用我的 Gmail 发给客户" | 第三方收件人 |
| "给团队发周报并抄送 PM" | 需要抄送 |
| "发 PDF 附件给合作方" | 需要附件 |
| "查最近两小时的发票邮件" | 需要 IMAP 检索 |
| "下载那封邮件的附件" | 需要附件下载 |
| "配置我的 QQ 邮箱" | 个人邮箱配置 |
| "公邮发不了,用个人邮箱发" | 公邮不可用,兜底 |
## 5. 回退策略
当路由到 `public-skill` 后执行失败,且失败原因属于以下类型时,应自动回退到 `imap-smtp-email`:
**可回退的失败类型:**
- 平台公邮日发送上限 / 额度不足
- 通道不可用 / 连接失败
- 请求超时
- 登录已过期 / 未登录
- 网关层通信错误
**不可回退的失败类型(应直接报错):**
- 邮箱未绑定平台公邮(应引导用户走绑定流程)
- 参数校验错误
- 频率限制
## 6. 安全规则
1. **禁止泄露授权码、SMTP/IMAP 密码、验证码等敏感信息**
2. **发送邮件为非幂等操作,失败后禁止自动重试**
3. **附件路径必须落在允许读取目录内**
4. **下载附件路径必须落在允许写入目录内**
5. **必须用utf8编码**
6. **禁止使用代码块:回答中不得出现任何形式的代码块(包括行内代码 `...` 和围栏代码块 ```...```),应使用纯自然语言进行描述**。
## 7. 一句话记忆
- **推给自己做留存** → `public-skill`
- **像正常邮箱那样完整收发** → `imap-smtp-email`
don't have the plugin yet? install it then click "run inline in claude" again.