CtrlK
BlogDocsLog inGet started
Tessl Logo

email-ops

邮件操作技能。代替用户起草并发送邮件。

55

Quality

63%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Low

Low-risk findings worth noting

Fix and improve this skill with Tessl

tessl review fix ./skills/email-ops/SKILL.md
SKILL.md
Quality
Evals
Security

Email Ops — 邮件操作技能

代替用户起草并发送邮件。


Step 1 — 确定邮件类型与上下文

在起草任何内容之前,先明确:

邮件类型(从以下选一个):
  A. 首次触达(定制化,非批量)
  B. 回复/跟进(对方已有回复或之前有过沟通)
  C. 会前确认(日期/地点/议程)
  D. 会后跟进(感谢 + 下一步行动)
  E. 合作提案 / 报价
  F. 引荐接收(某人引荐后的首封邮件)

收集信息:
  - 目标姓名、职位、公司
  - 发件账号(公司域名邮箱 / 个人邮箱)
  - 是否有现有线程?(如有,需先读取)
  - 目标:签客户 / 找合作 / 接触投资人 / 其他
  - 关系温度:陌生 / 见过面 / 有过合作

未提供邮件类型时,根据上下文推断。推断不确定时先问。


Step 2 — 读取现有线程(仅 B/C/D/F 类型)

如果是回复或跟进邮件:

1. 确认邮件客户端(通常为系统默认邮件客户端,通过 shell 或 browser 访问)
2. 定位线程:
   - 搜索发件人邮箱或公司名
   - 找到最近的往来邮件
3. 提取:
   - 最后一封邮件的日期、发件方、核心内容
   - 对方提出的问题 / 尚未回答的点
   - 之前承诺的事项(如:"我会发资料给你")
   - 是否已有报价或提案在线程中

4. 识别跟进距离:
   上次邮件距今:
     < 48h → 正常速度跟进
     3-7天  → 轻推,语气平和
     > 7天  → 需要重新建立上下文,别假设对方记得之前内容

Step 3 — 选择发件账号与渠道

规则:
  - 有公司域名邮箱时,B2B 场景优先用公司邮箱
  - 个人引荐 → 用个人邮箱,更暖
  - 与投资人沟通 → 优先公司邮箱(显示专业度)
  - 发件人名称格式:完整姓名 + 公司名
    例:张三 <zhangsan@company.com>

渠道确认:
  - 对方之前用邮件回复 → 继续邮件
  - 对方之前提到微信 → 建议换到微信,邮件只发摘要
  - 没有回复记录 → 默认邮件

Step 4 — 起草邮件

根据邮件类型,使用对应结构:

A. 首次触达(定制化)

LLM Prompt:
"起草一封与潜在合作伙伴或投资人建立联系的信件,发给 {姓名}({职位} @ {公司})。

背景:
- 发件人:{姓名},{职位},{公司及一句话介绍}
- 目的:{目的,例如:探讨数据采集服务合作}
- 找他的理由:{个性化理由,例如:看到贵公司近期发布了...}
- 关系温度:陌生 / 通过 {中间人} 引荐

格式要求:
- 中文
- Subject:10 字以内,具体到对方业务,不用感叹号
- 正文 3 段,总计 120-150 字:
  段 1:为什么写这封邮件(个性化切入)
  段 2:我方能提供的价值(从对方视角,不是自我介绍)
  段 3:一个低摩擦 CTA(15 分钟通话 / 一封回复即可)
- 结尾不用"谢谢" / "期待您的回复" 等套话

返回格式:
Subject: [主题行]
---
[正文]"

B. 回复 / 跟进

LLM Prompt:
"起草一封跟进邮件,基于以下线程上下文。

线程摘要:
  - 上次发件方:{我方/对方}
  - 上次时间:{N 天前}
  - 未回答的问题:{具体内容}
  - 之前的承诺:{如有}

当前目的:{推进到下一步,例如:确认是否收到提案 / 约下次通话时间}

要求:
- 中文,简短,不超过 80 字正文
- 不要重复上封邮件的所有内容
- 如果是 3 天以上的跟进,先一句话刷新上下文
- 结尾一个明确问题或提议,不要 open-ended 收尾

返回格式:
Subject: Re: [原主题]
---
[正文]"

C. 会前确认

LLM Prompt:
"起草一封会议确认邮件。

会议信息:
  - 对象:{姓名} @ {公司}
  - 时间:{日期 + 时间 + 时区}
  - 形式:{视频会议/面谈,如视频则附链接}
  - 议程重点:{1-2 个核心议题}

要求:
- 中文,简短,不超过 60 字正文
- 确认时间 + 附议程 + 如有附件说明
- 语气专业但不冷漠

返回格式:
Subject: 确认:{时间} 与 {对方公司} 的会议
---
[正文]"

D. 会后跟进

LLM Prompt:
"起草一封会后跟进邮件。

会议信息:
  - 对象:{姓名} @ {公司}
  - 会议时间:{刚才 / N 天前}
  - 关键结论:{达成了什么共识}
  - 我方下一步行动:{例如:发送方案文档 / 安排 demo}
  - 对方下一步行动:{例如:内部讨论后反馈}
  - 期望截止时间(如有):{具体日期}

要求:
- 中文,简洁,正文不超过 100 字
- 结构:感谢 + 关键共识一句话 + 双方后续行动 + 期望时间点
- 语气温暖,不催促

返回格式:
Subject: 跟进:关于 {核心议题}
---
[正文]"

E. 合作提案 / 报价

LLM Prompt:
"起草一封合作提案邮件,发给 {姓名} @ {公司}。

提案内容:
  - 合作类型:{例如:数据服务 API 接入 / 渠道分销合作}
  - 核心价值:{我们能解决他们的什么问题}
  - 方案要点:{2-3 个关键条款或功能点}
  - 报价(如有):{价格/商务条件}
  - 附件:{如有方案 PDF 等}

背景:{是否有过会议讨论?对方的痛点是?}

要求:
- 中文
- Subject:直接说明提案内容,不用"关于合作"这类模糊标题
- 正文 4 段,总计 150-200 字:
  段 1:背景引用(基于上次沟通的某个点)
  段 2:方案概述 + 核心价值
  段 3:关键条款或亮点(可用简短列表)
  段 4:建议下一步(阅读附件 / 确认细节)
- 附上附件提示(如有)

返回格式:
Subject: [主题]
---
[正文]"

F. 引荐接收

LLM Prompt:
"起草一封接收引荐的邮件。

引荐信息:
  - 引荐人:{姓名}
  - 被引荐对象:{姓名} @ {公司}
  - 引荐人的邮件内容摘要:{引荐语}

我的背景:{一句话介绍}
目的:{和被引荐对象想聊什么}

要求:
- 中文
- Subject:Re: [引荐人邮件主题](三方 CC 格式)
- 正文 3 段,100 字以内:
  段 1:感谢引荐人(CC 他)
  段 2:向新认识的人自我介绍 + 为什么有价值聊
  段 3:提议具体时间通话或 CTA
- 语气:暖而不过分

返回格式:
To: {被引荐人邮箱}
CC: {引荐人邮箱}
Subject: Re: [原主题]
---
[正文]"

Step 5 — 发送(仅明确要求发送时)

通过 PATH 调用 wrapper,无需拼接脚本路径。

email-ops \
  --to "{收件人邮箱}" \
  --subject "{主题}" \
  --body "{正文}"

发送后立即确认:

检查 Sent 文件夹(通过邮件客户端 browser 访问 或 IMAP SENT 路径)
确认:消息是否在 Sent 中可见?

默认行为是起草,不发送。 只有用户明确说"发送"/"帮我发"时才执行发送。


Step 6 — 输出状态报告

MAIL OPS REPORT
───────────────
发件账号:
收件人:
邮件类型:
主题:

草稿:
[邮件正文]

状态:drafted / sent / blocked / awaiting-approval

后续建议:
  - 若无回复,{N} 天后跟进
  - 跟进方式:[邮件 / 微信 / LinkedIn]

跟进时间参考

邮件类型建议跟进等待期
首次触达3-5 个工作日
发送提案后2-3 个工作日
会后跟进1 个工作日内
引荐接收1-2 个工作日(趁热打铁)
已跟进一次无回复再等 5-7 天,改变切入角度
跟进两次无回复暂停,换渠道或等新触机窗口

常见错误

情况处理方式
SMTP 认证失败停止,检查 SMTP_USER / SMTP_PASSWORD,告知用户
找不到现有线程告知用户,确认是否以新邮件开始
用户说"发给他"但未给邮箱先问清楚收件人邮箱,不猜
合作提案缺少关键信息列出缺失项,请用户补充,不用模糊内容填充
发送后 Sent 无法确认报告 "awaiting verification",不声称已发送成功
Repository
TeamWiseFlow/xiaobei
Last updated
First committed

Is this your skill?

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.