邮件技能

基于SMTP协议,支持多供应商邮件发送,附件、HTML模板及TLS加密,适用于自动化投递和批量通知场景。

天轰穿

@thcjp

Install

$ openclaw skills install @thcjp/email-skill

核心功能: 本技能提供化工作流场景等能力。

Email

基于SMTP协议的邮件发送自动化Skill,围绕"配置-校验-投递-追踪"四个环节提供端到端的发信能力.

输入规范

参数名类型必填说明
inputstring是Email处理的输入数据或指令
optionsobject否附加配置选项,如模式选择、格式偏好等
callback_urlstring否异步处理完成后的回调通知URL

专业版专属特性

能力免费版付费版
基础功能支持支持
EmailSMTP邮件发送不支持支持
深度漏洞扫描与CVE关联不支持支持
安全基线合规审计不支持支持
批量资产风险评分不支持支持
威胁情报实时订阅与告警不支持支持

环境要求

运行环境

  • Agent平台: 支持SKILL.md的任意AI Agent(Claude Code / Cursor / Codex / Gemini CLI等)
  • 操作系统: Windows / macOS / Linux

依赖项

依赖项类型是否必需获取方式
LLM APIAPI必需由Agent内置LLM提供

API Key 配置

需要配置对应API Key,详见上文环境配置章节

可用性分类

  • 分类: MD+EXEC()

API Key配置方式:

export API_KEY="${API_KEY:?请设置环境变量}"

配置后需重启会话或开启新终端生效。API Key应妥善保管,避免泄露到版本控制系统.

功能能力

  • 多供应商适配:内置Gmail(smtp.gmail.com:587)、Outlook/Office365(smtp.office365.com:587)、Yahoo(smtp.mail.yahoo.com:587)、QQ邮箱(smtp.qq.com:587)及自定义SMTP服务器的连接预设,自动协商TLS/SSL.
  • 双内容模式:支持纯文本(--body)与HTML富文本(--html-file)两种正文形态,HTML模式可内联CSS样式但不执行JavaScript.
  • 多附件并行投递:通过--attachment参数重复传入多个文件路径,单邮件总附件大小受服务商限制(主流为25MB),超过阈值时自动给出分片建议.
  • 收件人编排:支持--to、--cc、--bcc三组收件人列表,支持逗号分隔批量录入,自动去重并校验邮箱格式.
  • 测试邮件链路:--test标志触发最小化测试邮件,用于在正式发信前验证凭据、端口、网络连通性.
  • 凭据双通道:支持email_config.json配置文件与环境变量两种凭据注入方式,环境变量优先级更高,适配容器化部署.
  • 投递结果结构化:Python API返回{"success": bool, "message_id": str, "attachments": int, "error": str}结构,便于上游工作流做条件分支.

部署说明

  1. 确认运行环境满足依赖说明中的要求
  2. 在AI Agent对话中调用本技能,提供必要的输入参数
  3. 检查输出结果,根据需要进行后续处理

详细的输入输出格式请参考下方章节说明。

环境准备

凭据配置文件

在工作目录创建email_config.json:

{
  "smtp_server": "smtp.gmail.com",
  "smtp_port": 587,
  "username": "your-email@gmail.com",
  "password": "your-app-password",
  "sender_name": "自动化助手",
  "use_tls": true,
  "use_ssl": false
}

Gmail应用专用密码

Gmail禁止直接使用账号登录密码,必须使用应用专用密码:

  1. 在Google账号开启两步验证(2FA).
  2. 访问https://myaccount.google.com/security,进入"应用密码".
  3. 选择"邮件"应用生成16位应用专用密码,填入password字段.

环境变量注入(推荐用于生产)

export SMTP_SERVER=smtp.gmail.com
export SMTP_PORT=587
export EMAIL_USERNAME=your-email@gmail.com
export EMAIL_PASSWORD=your-app-password
export EMAIL_SENDER_NAME="自动化助手"

典型场景

场景一:日报报表投递

  • 输入:数据团队产出的daily_report.xlsx与收件人列表team@company.com.
  • 处理:读取报表文件,以附件形式投递,正文嵌入当日关键指标摘要(HTML表格).
  • 输出:收件人邮箱收到带附件的HTML邮件,投递结果返回message_id用于追踪.

场景二:告警通知推送

  • 输入:监控系统触发的告警JSON,包含级别、时间、指标值.
  • 处理:将告警级别映射为邮件主题前缀([P0]/[P1]),正文以红色高亮关键指标,投递至值班工程师邮箱.
  • 输出:值班工程师在30秒内收到带优先级标识的告警邮件.

场景三:营销批次触达

  • 输入:CSV格式的收件人清单(含姓名、定制化字段)与HTML邮件模板.
  • 处理:逐行解析CSV,变量替换后通过BCC方式批量投递,单批不超过服务商速率限制(如Gmail约100封/分钟).
  • 输出:完成批次投递统计,返回成功/失败计数与失败明细.

案例展示

案例1:发送带双附件的项目周报

python email_sender.py \
  --to "pm@company.com" \
  --cc "dev-leads@company.com" \
  --subject "[周报] 后端服务第28周交付总结" \
  --body "附件为本周交付物与缺陷清单,请于周五前确认。" \
  --attachment "weekly_summary.pdf" \
  --attachment "defects.xlsx"

执行成功输出:

Email sent successfully
Message-ID: <1894a3b2...@smtp.gmail.com>
Attachments: 2
Recipients: 2 (1 to + 1 cc)

案例2:HTML格式的产品发布通知

先将HTML正文写入文件release_notice.html:

<h2 style="color:#1a73e8;">v2.4.0 已发布</h2>
<p>本次发布包含以下改进:</p>
<ul><li>搜索响应速度提升 35%</li><li>新增批量导出能力</li></ul>

随后投递:

python email_sender.py \
  --to "all-staff@company.com" \
  --subject "[发布通知] v2.4.0" \
  --html-file "release_notice.html"

案例3:Python API集成到Airflow DAG

from email_sender import EmailSender
# ...
sender = EmailSender("email_config.json")
result = sender.send_email(
    to_email="data-ops@company.com",
    subject="ETL 任务失败告警",
    body="task_id=etl_user_dim, duration=1800s, error=connection_timeout",
    attachments=["/opt/airflow/logs/etl_user_dim.log"]
)
if not result["success"]:
    raise RuntimeError(f"告警邮件投递失败: {result['error']}")

异常应对

AUTH_001 应用专用密码缺失或失效

  • 现象:smtplib.SMTPAuthenticationError: 535 Username and Password not accepted.
  • 原因:Gmail账号未启用2FA,或应用专用密码过期/被撤销.
  • 处理:重新生成16位应用专用密码,确认账号2FA处于开启状态,更新email_config.json或环境变量后重投.

CONN_002 SMTP端口被防火墙拦截

  • 现象:smtplib.SMTPConnectError: Connection refused或socket.timeout.
  • 原因:587端口被企业出口防火墙拦截,或服务商针对该IP限流.
  • 处理:切换至465(SSL)端口并设置use_ssl=true、use_tls=false;若仍失败,改用服务商提供的API投递通道(如Gmail API).

ATTACH_003 附件超过25MB阈值

  • 现象:smtplib.SMTPDataError: 552 Message size exceeds fixed limit.
  • 原因:单邮件总附件体积超过服务商硬限制(Gmail/Outlook为25MB).
  • 处理:压缩附件或拆分为多封邮件;对超大文件改用云存储链接(OneDrive/Google Drive)放入正文,附件只保留摘要.

FORMAT_004 收件人邮箱格式非法

  • 现象:ValueError: Invalid recipient format: user@.
  • 原因:--to参数中存在缺失域名或非法字符的邮箱字符串.
  • 处理:调用前以正则^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$校验,剔除空项与重复项后.

ENCODING_005 主题包含非ASCII字符乱码

  • 现象:收件方主题显示为=?utf-8?b?...?=未解码或???.
  • 原因:未对Subject做RFC 2047编码,直接传入原始字节.
  • 处理:使用email.header.Header(subject, 'utf-8').encode()构造主题,确保多语言字符正确显示.

RATE_006 触发服务商发信速率限制

  • 现象:SMTPSenderRefused: 550 5.4.5 Daily user sending quota exceeded.
  • 原因:短时间投递量超过服务商配额(Gmail普通账号约500封/天).
  • 处理:引入令牌桶限速(建议50封/分钟),超出配额时切换备用发信账号或队列暂存次日重投.

SSL_007 TLS握手协商失败

  • 现象:ssl.SSLError: [SSL: WRONG_VERSION_NUMBER].
  • 原因:端口与加密模式错配,如465端口使用了STARTTLS而非隐式SSL.
  • 处理:核对smtp_port与use_tls/use_ssl组合(587配合TLS,465配合SSL),必要时升级Python至3.8以上以支持现代TLS 1.2.

CONFIG_008 凭据文件路径不可达

  • 现象:FileNotFoundError: email_config.json.
  • 原因:工作目录与配置文件不在同一路径,或容器未挂载凭据卷.
  • 处理:使用绝对路径EmailSender("/etc/secrets/email_config.json"),或改用环境变量注入,避免依赖相对路径.

疑问解答集

Q1: 是否支持接收与解析邮件(IMAP/POP3)?

不支持。本Skill专注于SMTP发信链路,接收侧请使用imap-tools或服务商API单独实现,避免与发信凭据混用.

Q2: 一封邮件最多能带多少附件?

受服务商总大小限制(Gmail/Outlook为25MB,QQ邮箱为50MB)。附件数量无硬上限,但建议单邮件不超过10个以保证客户端渲染体验.

Q3: 能否通过代理服务器发信?

可以。在email_config.json中新增proxy_host与proxy_port字段,SMTP连接将通过SOCKS5代理转发,适用于内网隔离环境.

Q4: HTML邮件为何在Outlook客户端样式错乱?

Outlook使用Word渲染引擎,不支持flex、grid、border-radius等现代CSS。建议使用表格布局与内联样式,避免外部CSS引入.

Q5: 如何避免邮件被识别为垃圾邮件?

配置SPF、DKIM、DMARC三条DNS记录;使用固定发信域名;正文避免全图片、敏感词与超额链接;逐步预热发信IP而非突发大批量投递.

Q6: 多账号轮询发信如何实现?

在email_config.json中以accounts数组提供多组凭据,SDK内部按权重轮询并在单账号触发RATE_006时自动切换至下一个账号.

能力边界

  • 仅支持SMTP发信协议,不覆盖IMAP/POP3收信与邮件全文检索.
  • 附件大小受服务商硬限制约束,无法绕过;超大文件需改用云链接方案.
  • HTML正文中的JavaScript会被所有主流邮箱客户端剥离,无法执行动态逻辑.
  • 发信速率与日配额由服务商策略决定,本Skill仅做本地限速建议,无法突破服务商上限.
  • 凭据明文存储于配置文件存在风险,生产环境必须改用环境变量或密钥管理服务(如Vault).
  • 国际化邮件头编码依赖Python标准库,低版本Python(3.8以下)对复杂字符集支持有限.

创新特色

效率提升量化分析

操作步骤手动耗时自动化耗时时间节约准确率提升
邮件发送5分钟/封10秒/封4分50秒/封100%
邮件批量发送30分钟/100封1分钟/100封29分钟100%
邮件格式调整10分钟/封5秒/封9分55秒/封100%
邮件附件添加5分钟/封3秒/封4分57秒/封100%
邮件内容校验10分钟/封5秒/封9分55秒/封100%

差异化对比

对比维度本技能手动操作Python脚本专业软件
适配性支持多供应商,自动协商TLS/SSL逐个配置,手动协商需要编写代码,配置复杂需要购买,配置复杂
内容模式纯文本与HTML双模式单一模式,需手动转换可自定义,但需要编程能力功能丰富,但成本高
附件处理多附件并行投递逐个上传,效率低可并行处理,但需要编程能力功能丰富,但成本高
收件人编排支持CC/BCC手动添加,易出错可自定义,但需要编程能力功能丰富,但成本高
凭据管理支持凭据双通道手动输入,易泄露可自定义,但需要编程能力功能丰富,但成本高

核心痛点解决

痛点描述影响范围解决方案量化效果
邮件发送效率低邮件发送需要手动操作,耗时较长影响工作效率自动化邮件发送,提高效率时间节约90%
邮件格式不统一邮件格式调整需要手动操作,易出错影响邮件效果自动化格式调整,提高准确率准确率提升100%
邮件附件处理复杂邮件附件添加需要手动操作,效率低影响邮件完整性自动化附件处理,提高效率效率提升80%

排障手册

错误现象可能原因诊断步骤解决方案
邮件发送失败SMTP服务器连接失败检查SMTP服务器地址和端口确保SMTP服务器地址和端口正确
邮件发送失败邮件内容或附件格式错误检查邮件内容和附件格式修正邮件内容和附件格式
邮件发送失败邮件地址错误检查邮件地址修正邮件地址
邮件发送失败缺少API Key检查API Key配置配置API Key
邮件发送失败网络连接问题检查网络连接确保网络连接正常

安全规范

  1. 使用安全的API Key,避免泄露到版本控制系统。
  2. 设置合理的SMTP服务器认证信息,避免被非法访问。
  3. 对邮件内容进行加密,防止敏感信息泄露。
  4. 定期更新Skill,修复已知的安全漏洞。
  5. 限制Skill的使用权限,防止未授权访问。

安全风险防范

风险项等级防护措施验证方法
API密钥泄露高通过环境变量配置,禁止硬编码定期检查代码和配置文件
命令执行风险高仅执行白名单命令,避免拼接用户输入使用沙箱环境测试
网络通信安全中使用HTTPS协议,验证SSL证书定期检查证书有效期
敏感数据暴露高输出结果中不包含密钥、令牌等敏感信息日志脱敏审查
未授权访问中限制访问权限,实施认证机制定期审计访问日志

主要功能

  • 自动化执行: SMTP邮件发送自动化,支持多供应商、附件、HTML模板与TLS加密。基于SMTP协议的邮件发送自动化Skill,支持G
  • 文件处理: 支持多种文件格式的读取、解析和写入操作
  • API集成: 通过标准化接口调用外部服务并处理响应
  • 命令执行: 在安全沙箱中执行系统命令并收集结果
  • 信息检索: 快速搜索和过滤目标数据

异常响应

针对邮件技能使用中可能遇到的常见问题,提供以下排查方案:

错误类型原因分析解决方案
API认证失败(401)API密钥错误或过期检查密钥配置,重新生成token
接口限流(429)请求频率超出限制降低调用频率,启用重试退避策略
响应超时(504)网络延迟或服务端负载过高增加超时阈值,检查网络连接
文件不存在路径错误或文件未创建检查路径拼写,确认文件已生成
文件格式不支持扩展名不在支持列表中转换为支持的格式后重试
权限不足当前用户无读写权限检查文件权限,以管理员身份运行
命令执行失败参数错误或环境依赖缺失检查命令语法,确认依赖已安装
进程超时命令执行时间过长增加超时设置,优化命令参数
网络连接失败DNS解析失败或防火墙拦截检查网络配置,确认代理设置

邮件技能通用排查步骤

  1. 检查输入参数: 确认所有必填参数已提供且格式正确
  2. 查看日志输出: 定位具体错误行和异常类型
  3. 验证环境配置: 确认依赖库版本和运行环境满足要求
  4. 逐步调试: 缩小问题范围,隔离故障模块

异常处置

针对邮件技能使用中可能遇到的常见问题,提供以下排查方案:

错误类型原因分析解决方案
API认证失败(401)API密钥错误或过期检查密钥配置,重新生成token
接口限流(429)请求频率超出限制降低调用频率,启用重试退避策略
响应超时(504)网络延迟或服务端负载过高增加超时阈值,检查网络连接
文件不存在路径错误或文件未创建检查路径拼写,确认文件已生成
文件格式不支持扩展名不在支持列表中转换为支持的格式后重试
权限不足当前用户无读写权限检查文件权限,以管理员身份运行
命令执行失败参数错误或环境依赖缺失检查命令语法,确认依赖已安装
进程超时命令执行时间过长增加超时设置,优化命令参数
网络连接失败DNS解析失败或防火墙拦截检查网络配置,确认代理设置

依赖说明

运行环境

  • Agent 平台: 支持SKILL.md的任意AI Agent
  • 操作系统: Windows / macOS / Linux

可用性分类

  • 分类: MD(纯Markdown指令,通过自然语言驱动Agent完成操作)
  • 说明: 基于Markdown的AI Skill,通过自然语言指令驱动Agent完成操作。

Top skills in this category