ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

小贝(xiaobei)email-ops 技能实战:从邮件起草到 SMTP 发送的完整 Agent 工作流

小贝(xiaobei)email-ops 技能实战:从邮件起草到 SMTP 发送的完整 Agent 工作流 人工智能AI Agent大模型AI 应用媒体生成【免费下载链接】xiaobei为OPC/中小微企业量身打造的自媒体获客智能体项目地址https://gitcode.com/gh_mirrors/wi/xiaobei点击查看免费下载本文基于开源仓库 xiaobei 中公共技能 skills/email-ops/SKILL.md 展开系统讲解该技能如何代替用户完成「先起草、再发送」的完整邮件操作包括六类商务邮件的结构化起草模板、现有线程读取与跟进节奏判断、发件账号与渠道选择、基于 SMTP 的底层发送实现以及发送后的状态报告与跟进策略。读完本文你将掌握在小贝智能体环境中驱动 email-ops 完成首次触达、回复跟进、会前确认、会后跟进、合作提案与引荐接收等真实场景邮件任务的方法并理解其 wrapper 调用链与 send_email.py 的底层实现原理。一、技能定位与运行前提email-ops 是 xiaobei 仓库中的公共技能。根据 skills/README.md 的技能清单它面向邮件读写与发送场景适用范围为全部 crew 可用在 config-templates/openclaw.json 中email-ops被列入默认 crewmain小贝的skills列表同时也在 config-templates/openclaw-awk.json 中出现说明其为多 crew 共享的基础能力注意content-producer crew 的 DENIED_SKILLS 中明确排除 email-ops属于例外配置。SKILL.md 的 frontmatter 元数据给出了该技能声明式的能力约束name: email-ops description: 邮件操作技能。代替用户起草并发送邮件。 metadata: openclaw: emoji: always: false requires: bins: - python3 env: - SMTP_SERVER - SMTP_USER - SMTP_PASSWORD运行前提有三点Python 3底层发送脚本 send_email.py 只使用 Python 标准库smtplib、ssl、email.mime零第三方依赖因此任何带 python3 的环境即可运行SMTP 环境变量SMTP_SERVER、SMTP_USER、SMTP_PASSWORD三项必需。按仓库部署约定见 config/daemon.env.template 的说明技能密钥统一写入~/.openclaw/.env所有 openclaw 进程都会加载用户无需修改 daemon.env.templateconfig/README.md亦将SMTP_*列为占位就位的环境变量always: false该技能不是每次会话自动执行而是由 Agent 按需调用。二、Step 1确定邮件类型与上下文起草任何邮件之前必须先明确邮件类型与上下文。SKILL.md 定义了六种邮件类型类型场景A. 首次触达定制化、非批量的一对一联系B. 回复 / 跟进对方已有回复或之前有过沟通C. 会前确认确认日期 / 地点 / 议程D. 会后跟进感谢 下一步行动E. 合作提案 / 报价商务合作方案或报价F. 引荐接收某人引荐后的首封邮件需要收集的信息包括目标姓名、职位、公司发件账号公司域名邮箱 / 个人邮箱是否有现有线程如有需先读取目标签客户 / 找合作 / 接触投资人 / 其他关系温度陌生 / 见过面 / 有过合作。规则未提供邮件类型时根据上下文推断推断不确定时先问用户不要擅自假设。三、Step 2读取现有线程仅 B/C/D/F 类型回复或跟进类邮件必须先读取历史线程避免重复提问或内容脱节。操作路径确认邮件客户端通常为系统默认邮件客户端通过 shell 或 browser 访问定位线程搜索发件人邮箱或公司名找到最近的往来邮件提取关键信息最后一封邮件的日期、发件方、核心内容对方提出的问题 / 尚未回答的点之前承诺的事项如我会发资料给你是否已有报价或提案在线程中。跟进距离判断直接决定措辞强度上次邮件距今 48h→ 正常速度跟进3–7 天→ 轻推语气平和 7 天→ 需要重新建立上下文别假设对方记得之前内容。四、Step 3选择发件账号与渠道账号选择规则有公司域名邮箱时B2B 场景优先用公司邮箱个人引荐 → 用个人邮箱更暖与投资人沟通 → 优先公司邮箱显示专业度发件人名称格式完整姓名 公司名例如张三 zhangsancompany.com。渠道确认规则对方之前用邮件回复 → 继续邮件对方之前提到微信 → 建议换到微信邮件只发摘要没有回复记录 → 默认邮件。五、Step 4六类邮件起草模板SKILL.md 为每一类邮件提供了可直接投喂给 LLM 的结构化 Prompt 模板包含背景变量、格式要求与返回格式。以下完整继承并给出可替换的占位符说明。A. 首次触达定制化LLM Prompt: 起草一封与潜在合作伙伴或投资人建立联系的信件发给 {姓名}{职位} {公司}。 背景 - 发件人{姓名}{职位}{公司及一句话介绍} - 目的{目的例如探讨数据采集服务合作} - 找他的理由{个性化理由例如看到贵公司近期发布了...} - 关系温度陌生 / 通过 {中间人} 引荐 格式要求 - 中文 - Subject10 字以内具体到对方业务不用感叹号 - 正文 3 段总计 120-150 字 段 1为什么写这封邮件个性化切入 段 2我方能提供的价值从对方视角不是自我介绍 段 3一个低摩擦 CTA15 分钟通话 / 一封回复即可 - 结尾不用谢谢 / 期待您的回复 等套话 返回格式 Subject: [主题行] --- [正文]要点首次触达强调个性化与对方视角Subject 精简到 10 字以内且必须具体到对方业务结尾用低摩擦 CTA 而非客套话。B. 回复 / 跟进LLM Prompt: 起草一封跟进邮件基于以下线程上下文。 线程摘要 - 上次发件方{我方/对方} - 上次时间{N 天前} - 未回答的问题{具体内容} - 之前的承诺{如有} 当前目的{推进到下一步例如确认是否收到提案 / 约下次通话时间} 要求 - 中文简短不超过 80 字正文 - 不要重复上封邮件的所有内容 - 如果是 3 天以上的跟进先一句话刷新上下文 - 结尾一个明确问题或提议不要 open-ended 收尾 返回格式 Subject: Re: [原主题] --- [正文]要点跟进邮件要短≤80 字不重复历史内容收尾必须是明确的问题或提议避免开放结尾。C. 会前确认LLM Prompt: 起草一封会议确认邮件。 会议信息 - 对象{姓名} {公司} - 时间{日期 时间 时区} - 形式{视频会议/面谈如视频则附链接} - 议程重点{1-2 个核心议题} 要求 - 中文简短不超过 60 字正文 - 确认时间 附议程 如有附件说明 - 语气专业但不冷漠 返回格式 Subject: 确认{时间} 与 {对方公司} 的会议 --- [正文]要点会议确认要极简≤60 字核心是时间、议程、附件三个要素同时注明时区。D. 会后跟进LLM Prompt: 起草一封会后跟进邮件。 会议信息 - 对象{姓名} {公司} - 会议时间{刚才 / N 天前} - 关键结论{达成了什么共识} - 我方下一步行动{例如发送方案文档 / 安排 demo} - 对方下一步行动{例如内部讨论后反馈} - 期望截止时间如有{具体日期} 要求 - 中文简洁正文不超过 100 字 - 结构感谢 关键共识一句话 双方后续行动 期望时间点 - 语气温暖不催促 返回格式 Subject: 跟进关于 {核心议题} --- [正文]要点会后跟进按「感谢 → 共识 → 双方行动 → 时间点」四段结构明确双方下一步责任但不催促。E. 合作提案 / 报价LLM Prompt: 起草一封合作提案邮件发给 {姓名} {公司}。 提案内容 - 合作类型{例如数据服务 API 接入 / 渠道分销合作} - 核心价值{我们能解决他们的什么问题} - 方案要点{2-3 个关键条款或功能点} - 报价如有{价格/商务条件} - 附件{如有方案 PDF 等} 背景{是否有过会议讨论对方的痛点是} 要求 - 中文 - Subject直接说明提案内容不用关于合作这类模糊标题 - 正文 4 段总计 150-200 字 段 1背景引用基于上次沟通的某个点 段 2方案概述 核心价值 段 3关键条款或亮点可用简短列表 段 4建议下一步阅读附件 / 确认细节 - 附上附件提示如有 返回格式 Subject: [主题] --- [正文]要点提案邮件 Subject 必须直接说明内容拒绝关于合作式模糊标题正文 4 段引用上次沟通背景、概述方案价值、列出关键条款、给出下一步建议。F. 引荐接收LLM Prompt: 起草一封接收引荐的邮件。 引荐信息 - 引荐人{姓名} - 被引荐对象{姓名} {公司} - 引荐人的邮件内容摘要{引荐语} 我的背景{一句话介绍} 目的{和被引荐对象想聊什么} 要求 - 中文 - SubjectRe: [引荐人邮件主题]三方 CC 格式 - 正文 3 段100 字以内 段 1感谢引荐人CC 他 段 2向新认识的人自我介绍 为什么有价值聊 段 3提议具体时间通话或 CTA - 语气暖而不过分 返回格式 To: {被引荐人邮箱} CC: {引荐人邮箱} Subject: Re: [原主题] --- [正文]要点引荐接收采用三方 CC 结构——To 写被引荐人、CC 写引荐人正文首段感谢引荐人全程保持暖而不过分的语气。六、Step 5发送邮件与 wrapper 调用链默认行为是起草不发送。只有用户明确说发送/帮我发时才执行发送。发送时通过 PATH 调用 wrapper无需拼接脚本路径email-ops \ --to {收件人邮箱} \ --subject {主题} \ --body {正文}这里的email-ops是一个薄转发 wrapper。仓库的 wrapper 机制详见 docs/d21-symlink-skill.md 与 scripts/lib/skill-wrappers.sh设计目标很明确弱模型小参数模型经常拼错脚本绝对路径漏workspace-前缀、下划线与短横线错位等因此为单一入口的 skill 统一提供skill-name cmd的 PATH 调用风格。部署时 email-ops.sh 会被ln -sfn软链到~/.openclaw/bin/email-opsensure_openclaw_bin_in_path再把~/.openclaw/bin幂等注入~/.zshrc/~/.bashrc的 PATH。wrapper 本身只是一个exec转发壳#!/usr/bin/env bash set -euo pipefail SELF${BASH_SOURCE[0]} while [ -L $SELF ]; do SELF$(readlink -f $SELF); done SCRIPT_DIR$(cd $(dirname $SELF) pwd) exec python3 $SCRIPT_DIR/scripts/send_email.py $注意 wrapper 通过readlink -f解析软链保证SCRIPT_DIR始终指向技能真实目录因此无论从~/.openclaw/bin还是直接调用都指向同一个 send_email.py。发送实现send_email.py 的底层逻辑send_email.py 是真正的发送核心全部使用 Python 标准库。其环境变量语义环境变量含义默认值 / 说明SMTP_SERVERSMTP 服务器主机名必需如smtp.gmail.com、smtp.qq.comSMTP_PORT端口默认587STARTTLS设为465则走 SSLSMTP_USER登录用户名通常即发件邮箱必需SMTP_PASSWORD密码或应用专用密码必需SMTP_FROM发件人显示名 地址可选如张三 yougmail.com缺省时回退为SMTP_USER命令行参数方面--to与--subject必填正文二选一--body直接传纯文本正文或--body-file从文件读取正文较长时更稳妥读取失败会返回Body file not found错误并退出码 1。底层发送逻辑要点端口分叉当SMTP_PORT 465时使用smtplib.SMTP_SSL一开始就建 SSL 连接否则走smtplib.SMTPstarttls()STARTTLS 加密端口 587 或 25连接超时 30 秒From 头构造用email.utils.parseaddr解析SMTP_FROM再以formataddr生成显示名 地址格式与 SKILL.md 中完整姓名 公司名的发件人规范一致消息结构MIMEMultipart(alternative)MIMEText(body, plain, utf-8)即纯文本 UTF-8 邮件输出为 JSON成功返回{ok: true, to: ..., message: sent}失败返回{ok: false, to: ..., error: ...}并以退出码 1 退出便于 Agent 程序化解析精细化异常分类SMTPAuthenticationError认证失败、SMTPRecipientsRefused收件人拒绝、SMTPDataError数据错误可能是垃圾邮件拦截、SMTPConnectError连接失败会提示检查SMTP_SERVER/SMTP_PORT、TimeoutError连接超时。发送后确认检查 Sent 文件夹通过邮件客户端 browser 访问 或 IMAP SENT 路径 确认消息是否在 Sent 中可见若无法在 Sent 中确认不得声称已发送成功应如实报告状态。七、Step 6输出状态报告每次操作结束后输出结构化报告便于用户与后续流程读取MAIL OPS REPORT ─────────────── 发件账号 收件人 邮件类型 主题 草稿 [邮件正文] 状态drafted / sent / blocked / awaiting-approval 后续建议 - 若无回复{N} 天后跟进 - 跟进方式[邮件 / 微信 / LinkedIn]状态字段取值包括drafted仅起草、sent已发送、blocked被拦截/失败、awaiting-approval等待用户批准发送。八、跟进时间参考SKILL.md 给出的跟进节奏表是邮件运营的核心策略依据邮件类型建议跟进等待期首次触达3-5 个工作日发送提案后2-3 个工作日会后跟进1 个工作日内引荐接收1-2 个工作日趁热打铁已跟进一次无回复再等 5-7 天改变切入角度跟进两次无回复暂停换渠道或等新触机窗口关键原则跟进不是简单重发——无回复后要改变切入角度两次无回复后应暂停切换渠道微信 / LinkedIn 等或等待新的触机窗口。九、常见错误与处理情况处理方式SMTP 认证失败停止检查 SMTP_USER / SMTP_PASSWORD告知用户找不到现有线程告知用户确认是否以新邮件开始用户说发给他但未给邮箱先问清楚收件人邮箱不猜合作提案缺少关键信息列出缺失项请用户补充不用模糊内容填充发送后 Sent 无法确认报告 awaiting verification不声称已发送成功这些处理规则与 send_email.py 的异常分类一一对应认证失败对应SMTPAuthenticationError发送拒绝对应SMTPRecipientsRefused/SMTPDataError。整体原则是宁可停下来询问用户也不猜测或虚构。十、在项目业务流中的调用场景email-ops 并非孤立技能它在 xiaobei 的多个业务 crew 技能中被明确作为发送链路的一环lead-hunting线索获取后通过 Email 联系先校验email-ops所需环境变量是否齐全若不全则跳过 Email 步骤并记录齐全则使用 email-ops 发送且每封邮件之间保持 30–60 秒间隔批量防封策略investor-hunting对 high 匹配度的投资人使用 investor-outreach 生成话术经用户确认后用 email-ops 发送investor-outreach发送邮件依赖email-opsinvestor-materials投资人触达需要发送材料时email-ops发邮件investor-outreach写话术形成分工。由此可以看到完整的业务链路话术生成investor-outreach / lead-hunting→ 用户确认 → email-ops 起草与发送 → 状态报告 → 按跟进表安排下次触达。这与 docs/d21-symlink-skill.md 记录的实测结论一致——email-ops 的 wrapper 转发链路email-ops→send_email.py已通过验证。结语email-ops 是一套流程严谨、默认只起草、发送有据可查的邮件操作技能六类结构化 Prompt 模板保证内容质量与一致性wrapper PATH 调用消除弱模型路径拼接错误纯标准库的 send_email.py 让部署零依赖JSON 输出与精细化异常分类让 Agent 可以可靠地接入业务链路。对需要在获客、投资人沟通等场景中稳定发送商务邮件的团队来说这套从起草规范到发送实现的完整方案可以直接复制使用配置SMTP_SERVER/SMTP_USER/SMTP_PASSWORD必要时加SMTP_PORT/SMTP_FROM后即可通过email-ops --to ... --subject ... --body ...完成发送并依据跟进时间表安排后续触达节奏。赞分享人工智能AI Agent大模型AI 应用媒体生成【免费下载链接】xiaobei为OPC/中小微企业量身打造的自媒体获客智能体项目地址https://gitcode.com/gh_mirrors/wi/xiaobei点击查看免费下载相关推荐Tabby 邮件模板开发指南从 React Email 组件到 SMTP 发送的完整链路Tabby 邮件模板开发指南从 React Email 组件到 SMTP 发送的完整链路 本文以 Tabby 仓库中 ee/tabby email 模块为核心人工智能大模型本地部署模型推理服务后端RAG交互助手CodeIgniter Email 类完整实战指南Mail / Sendmail / SMTP 多协议邮件发送与调试CodeIgniter Email 类完整实战指南Mail / Sendmail / SMTP 多协议邮件发送与调试 CodeIgniter 内置的 Emai后端Web框架Apache DolphinScheduler 邮件告警Email 插件配置实战从告警实例创建到 SMTP 发送原理Apache DolphinScheduler 邮件告警Email 插件配置实战从告警实例创建到 SMTP 发送原理 导读 本文围绕 Apache Dol任务调度大数据后端前端上一篇Loop5分钟学会用径向菜单高效管理Mac窗口桌面从此不再杂乱下一篇OpenCore Legacy Patcher终极指南3步让老Mac免费运行最新macOS系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表