Skip to content

使用方式 ​

这个 skill 面向 Agent 原生工作流:你描述要发什么、发给谁、是否只是预览,Agent 负责检查配置、生成邮件快照和执行发送。

典型 Prompt ​

  • 请用 QQ 邮箱 SMTP dry-run 一封测试邮件,并把 .eml 快照写到 .tmp/runs/<run-id>/send-qq-email/。
  • 请检查我的 QQ 邮箱 SMTP 环境变量是否齐全,不要真实发送邮件。
  • 请把这段日报内容通过 QQ 邮箱发给我指定的收件人;发送前先确认收件人。

推荐流程 ​

  1. 明确这是 dry-run、配置检查,还是真实发送。
  2. 真实发送前确认收件人和发送意图。
  3. 从环境变量或私有配置文件读取 SMTP 设置。
  4. 构造 UTF-8 MIME 邮件。
  5. 写入 .eml 快照和 result.json。
  6. dry-run 到此结束;真实发送则继续连接 smtp.qq.com。

必要配置 ​

字段说明
SMTP_USERNAMEQQ 邮箱地址。
SMTP_PASSWORDQQ 邮箱 SMTP 授权码,不是登录密码。
SMTP_TO默认收件人,也可用 --to 覆盖。

缺少配置时,按依赖说明中的 QQ 邮箱人工设置步骤补齐。字段详细参考保存在子仓 references/smtp-config.md;脚本不自动读取 .env。

脚本入口 ​

以下命令都从 workspace 根目录运行。将 <run-id> 替换为本次工作目录名并沿用当前 run root。dry-run 仍需提供 SMTP_USERNAME、SMTP_PASSWORD 和收件人,但不会连接 SMTP;纯公开示例可使用明确的无效占位值,不能据此证明真实账号可用。所有产物都写入 .tmp/runs/<run-id>/send-qq-email/。

先查看帮助,不读取配置也不发送邮件:

powershell
python skills/send-qq-email/scripts/send_qq_email.py --help

dry-run 测试邮件:

powershell
python skills/send-qq-email/scripts/send_qq_email.py `
  --test `
  --dry-run `
  --output-dir .tmp/runs/<run-id>/send-qq-email/test

dry-run 自定义正文:

powershell
python skills/send-qq-email/scripts/send_qq_email.py `
  --subject "Daily report" `
  --text "This is a dry-run daily report." `
  --to receiver@example.com `
  --dry-run `
  --output-dir .tmp/runs/<run-id>/send-qq-email/daily-report

使用私有配置文件:

powershell
python skills/send-qq-email/scripts/send_qq_email.py `
  --config "$env:USERPROFILE\.send-qq-email\email.yaml" `
  --test `
  --dry-run `
  --output-dir .tmp/runs/<run-id>/send-qq-email/config-check

依赖检查 ​

从 workspace 根目录检查 SMTP 配置:

powershell
python skills/send-qq-email/verify_dependencies.py

需要时可显式增加网络连通性检查:

powershell
python skills/send-qq-email/verify_dependencies.py --check-network

默认检查只读取外部 SMTP 配置,确认 SMTP_USERNAME、SMTP_PASSWORD 和 SMTP_TO 是否存在;--check-network 还会尝试连接配置的 SMTP 主机和端口。该入口不会编译发送脚本、不会生成邮件,也不会执行 dry-run smoke test。

检查器会忽略发送脚本的 --config / --to 参数,且只解析简单 YAML;如果实际发送只通过 --to 提供收件人,检查器仍可能报告默认 SMTP_TO 缺失。具体修复步骤和检查边界见依赖说明。

输入与输出 ​

项目说明
输入发送模式、收件人、主题、文本或 HTML 正文、可选附件,以及仓库外的 SMTP 配置。
输出.tmp/runs/<run-id>/send-qq-email/<task>/message.eml 和 .tmp/runs/<run-id>/send-qq-email/<task>/result.json。
临时目录workspace 根目录下的 .tmp/runs/<run-id>/send-qq-email/;不要把凭据或邮件临时产物写入 skill 子仓。

必须显式传 --output-dir。相对路径以运行命令时的工作目录为准;输出中的 <task> 只是调用方的子目录选择,脚本不会生成它。不要重复使用已有任务的输出目录,以免覆盖快照。--eml-output / --result-output 会各自覆盖对应文件位置,不会自动写进 --output-dir。

完成标准 ​

  • --help 只验证命令入口可读;邮件预览完成需退出码 0,且 result.json 为 status: dry_run、dry_run: true。
  • 成功预演后的 .eml 与 result.json 写入指定的 .tmp/runs/<run-id>/send-qq-email/<task>/,并检查实际标题、正文和附件。
  • 主 Agent 汇报模式、收件人、结果状态和产物路径,但不显示 SMTP 授权码。
  • 若为真实发送,发送意图和收件人已经明确;若信息不明确,已经由用户人工确认。

配置 / 正文校验失败通常退出 2 并写失败结果,尚未生成邮件时没有 .eml;SMTP 阶段失败退出 3 并保留快照。参数缺失及未捕获的文件读写异常不保证完整输出。sent_at 在预演和失败时也会填写;真实发送应依据 status: sent 判断 SMTP 调用结果,不能把时间戳当作已投递证据。

本 skill 默认不需要子 Agent 或 checker;普通调用无需为此额外授权。