当用户要对真实电子邮件账户做任何操作时触发:查收件箱、读信、回复、转发、撰写、发送、搜索、归档、删除。典型说法"查下我邮箱"、"xx 给我发了啥"、"check my inbox"。**不用于**:即时消息 / IM / 微信 / Slack、翻译含"邮件"二字的文本、对 .eml 文件做离线解析(→直接用 Read)。
66
80%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Fix and improve this skill with Tessl
tessl review fix ./apps/server/src/ai/builtin-skills/email-ops/SKILL.md| 工具 | 职责 | 只读 |
|---|---|---|
EmailQuery | 查询邮箱账号 / 邮件 / 统计 / 搜索(mode: list-accounts / list-unified / list-messages / get-message / search / unread-stats / list-mailboxes) | 是 |
EmailMutate | 发送 / 回复 / 转发 / 归档 / 删除 / 移动邮件(send / delete / move 需审批) | 否 |
加载:全部为 deferred 工具,调用前须先
ToolSearch(names: "EmailQuery,EmailMutate")激活 schema。
按你的目的选择——不要盲猜:
想知道有多少未读? → unread-stats
想看统一收件箱? → list-unified (scope: all-inboxes)
想看已发送/草稿/星标? → list-unified (scope: sent/drafts/flagged)
想在特定邮箱文件夹里翻邮件? → list-messages (需要 accountEmail + mailbox)
想按关键词/发件人搜索? → search (query 支持自然语言)
想读一封邮件的完整正文? → get-message (需要 messageId)
不知道用户配了哪些邮箱账户? → list-accounts(永远先调这个来获取 accountEmail)
需要知道有哪些文件夹? → list-mailboxes所有列表模式支持 cursor + pageSize(1-50) 分页。
1. list-accounts → 拿到可用的 accountEmail
2. list-unified (all-inboxes) → 看收件箱概览
3. get-message (messageId) → 读取需要回复的那封邮件完整内容
4. 草拟回复
5. ⚠️ 用纯文本把草稿(收件人 / 主题 / 正文)展示给用户,并明确询问"是否发送",等用户回复确认
6. send (带 inReplyTo + references) → 用户确认后才发送第 5 步为什么必须做? 因为邮件一旦发出就无法撤回。发错人、写错内容可能造成不可逆的尴尬甚至商业损失。永远让用户亲眼确认收件人、主题和正文后再发送。
第 6 步为什么必须带 inReplyTo? 因为不带它,回复会在收件人邮箱里变成一封独立新邮件,脱离原始对话线程。所有主流邮件客户端(Gmail、Outlook、Apple Mail)都依赖 Message-ID 头来组织会话。inReplyTo 填原邮件的 messageId,references 填原邮件的 references 链 + 原邮件 messageId。
1. list-accounts → 确认从哪个账户发
2. 根据用户意图草拟邮件
3. ⚠️ 用纯文本展示完整邮件(收件人 / 主题 / 正文)并明确询问"是否发送",等用户回复确认
4. send → 确认后发送1. search (query: "newsletter") → 找到所有匹配邮件
2. 向用户汇报搜索结果摘要
3. batch-move / batch-delete → 按用户指示批量操作大结果集处理:搜索可能返回大量结果。遵循以下原则:
pageSize: 20 获取第一页,向用户汇报总数和样本1. unread-stats → 快速了解各账户未读量
2. list-unified (all-inboxes, pageSize: 20) → 获取最新邮件列表
3. 对重要邮件逐一 get-message → 读取详情
4. 生成结构化摘要(按紧急度/发件人分组)转发邮件没有独立的 forward 动作,使用 send 实现:
get-message 获取原邮件完整内容to 填转发目标,subject 加 Fwd: 前缀,bodyText 包含原邮件内容(添加 "---------- Forwarded message ----------" 分隔头和原始发件人/日期/主题信息)send当前版本不支持邮件附件的发送和下载。如果用户要求:
send 动作的 bodyText 参数为纯文本格式,不支持 HTML。如果用户要求富文本格式(加粗、图片、表格等),告知当前仅支持纯文本,复杂格式建议在邮件客户端中编辑。
inReplyTo:线程会断裂,收件人看到的是孤立的新邮件。accountEmail 就瞎调:很多操作需要 accountEmail。如果不确定,先 list-accounts。Re: 前缀:subject 应保持 Re: 原主题 格式以维持线程显示。Fwd: 前缀:subject 应保持 Fwd: 原主题 格式。EmailQuery 7 种模式:list-accounts · list-mailboxes · list-messages · list-unified · get-message · search · unread-stats
EmailMutate 8 种动作:send · mark-read · flag · delete · move · batch-mark-read · batch-delete · batch-move
发送相关参数(send):需要 accountEmail、to、subject、bodyText;回复额外需要 inReplyTo、references。具体参数见工具 schema。
a1ab5be
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.