send-email

📧 安全注入式 SMTP 邮件发送

通过 SMTP 协议发送邮件,支持主流邮箱(163/Gmail/QQ)及附件,配置注入式安全机制避免凭证泄露。

收藏
19.4k
安装
7k
版本
1.0.0
CLS 安全性认证2026-07-10
点击查看完整报告 >

使用说明

核心用法

send-email 是一个基于 Python 的 SMTP 邮件发送工具,通过命令行脚本实现邮件发送与附件传输。用户需在 ~/.openclaw/openclaw.json 中配置 SMTP 服务器参数,包括服务器地址、端口、发件人邮箱及授权码/App 密码。

关键执行指令

python3 ~/.openclaw/workspace/skills/send-email/send_email.py "recipient" "Subject" "Body"

支持附件追加第四个参数 /path/to/file.pdf

显著优点

1. 配置注入安全机制:OpenClaw 在运行时自动注入环境变量,禁止读取配置文件,从根本上避免凭证在工具输出中暴露
2. 多服务商兼容:内置 163、Gmail、QQ 等主流 SMTP 配置参考,支持 SSL(465) 和 TLS(587) 两种加密端口

3. 轻量依赖:仅需系统预装的 python3,无需额外二进制文件

4. 附件支持:单文件附件传递能力满足基础办公场景

潜在缺点与局限性

  • 单文件附件限制:一次只能附加一个文件,批量附件需多次调用
  • 无富文本支持:仅纯文本邮件,不支持 HTML 格式或内嵌图片
  • 配置静态化:SMTP 参数需预先写入配置文件,无法动态切换多邮箱账户
  • 无发送状态持久化:成功/失败仅依赖脚本退出码,无内置重试或队列机制
  • Python 环境依赖:依赖系统 python3,Windows 环境需额外确认 PATH 配置

适合人群

  • 开发者/运维人员:需要在自动化工作流中集成邮件通知(CI/CD 报警、定时报告)
  • 个人用户:快速发送纯文本邮件或单文件传输,不愿配置完整邮件客户端
  • 隐私敏感用户:欣赏注入式凭证管理,避免密码硬编码或 shell history 泄露

常规风险

| 风险项 | 说明 | 缓解措施 |
|--------|------|----------|
| 凭证配置错误 | 使用登录密码而非授权码导致认证失败 | 严格遵循文档:163/QQ 用授权码,Gmail 用 App Password |
| 端口混淆 | 465(SSL) 与 587(TLS) 误配导致连接失败 | 参考文档中的 SMTP reference 表格 |
| 路径注入 | 用户输入的附件路径未校验 | 确保路径参数来自可信来源或提前校验 |
| 邮件滥用 | 脚本被用于批量垃圾邮件发送 | 依赖 OpenClaw 的权限管控层,本身无频率限制 |

总体评估:send-email 是一个设计简洁、安全意识突出的基础邮件工具,适合技术用户嵌入自动化流程,但不适合作为通用邮件客户端或营销邮件发送方案。

安全解读

核心用法

send-email 是一个通过Python脚本实现SMTP邮件发送的实用工具,支持纯文本邮件和附件发送。使用时需在 ~/.openclaw/openclaw.json 中配置SMTP服务器地址、端口、发件人邮箱及授权码,OpenClaw会在运行时自动注入环境变量。

基本命令格式

python3 ~/.openclaw/workspace/skills/send-email/send_email.py "收件人" "主题" "正文"

带附件

python3 ~/.openclaw/workspace/skills/send-email/send_email.py "收件人" "主题" "正文" "/路径/附件.pdf"

显著优点

1. 零第三方依赖:仅使用Python标准库(smtplib、email、os、sys),无供应链攻击风险
2. 配置灵活:支持163、Gmail、QQ等主流SMTP服务商,SSL/TLS加密传输

3. Agent友好:环境变量自动注入,Agent执行时无需处理凭证读取逻辑

4. 功能完整:支持附件传输,满足基础自动化邮件通知需求

潜在缺点与局限性

  • 硬编码凭证风险:源码第19行存在硬编码默认授权码(ZCiPEFN3VP5WENR7),若用户未配置环境变量将使用默认值,存在严重安全隐患
  • 输入验证薄弱:对收件人邮箱格式、附件路径合法性缺乏校验
  • 无日志审计:默认不记录发送行为,不利于问题追溯
  • 单线程阻塞:基于同步smtplib实现,大批量发送时效率受限

适合人群

  • 需要自动化邮件通知的个人开发者
  • 已熟悉SMTP配置的技术用户
  • 能够手动修复硬编码凭证问题的用户
  • 不建议企业生产环境直接部署,需二次安全加固

常规风险

| 风险项 | 等级 | 说明 |
|--------|------|------|
| 硬编码凭证泄露 | 🔴 Critical | 默认值暴露,可能导致邮件账户被非法使用 |
| 环境变量泄露 | 🟡 Medium | 需确保 `~/.openclaw/openclaw.json` 文件权限(建议chmod 600) |
| 路径遍历 | 🟡 Medium | 附件参数未验证,存在潜在文件读取风险 |

修复建议(使用前必读)

必须手动修改 send_email.py 第19行,移除硬编码默认值:

# 修改前
AUTHORIZATION_CODE = os.getenv("EMAIL_SMTP_PASSWORD", "ZCiPEFN3VP5WENR7")

# 修改后
AUTHORIZATION_CODE = os.getenv("EMAIL_SMTP_PASSWORD")
if not AUTHORIZATION_CODE:
    raise ValueError("EMAIL_SMTP_PASSWORD 环境变量未设置")

修复后安全等级可从 B级提升至A级 以上。

send-email 内容

手动下载zip · 4.5 kB
README.mdtext/markdown
请选择文件