Appearance
使用方式
这个 skill 面向 Agent 原生工作流:你描述要发什么、发给谁、是否只是预览,Agent 负责检查配置、生成邮件快照和执行发送。
典型 Prompt
请用 QQ 邮箱 SMTP dry-run 一封测试邮件,并把 .eml 快照写到 .tmp/runs/<run-id>/send-qq-email/。请检查我的 QQ 邮箱 SMTP 环境变量是否齐全,不要真实发送邮件。请把这段日报内容通过 QQ 邮箱发给我指定的收件人;发送前先确认收件人。
推荐流程
- 明确这是 dry-run、配置检查,还是真实发送。
- 真实发送前确认收件人和发送意图。
- 从环境变量或私有配置文件读取 SMTP 设置。
- 构造 UTF-8 MIME 邮件。
- 写入
.eml快照和result.json。 - dry-run 到此结束;真实发送则继续连接
smtp.qq.com。
必要配置
| 字段 | 说明 |
|---|---|
SMTP_USERNAME | QQ 邮箱地址。 |
SMTP_PASSWORD | QQ 邮箱 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 --helpdry-run 测试邮件:
powershell
python skills/send-qq-email/scripts/send_qq_email.py `
--test `
--dry-run `
--output-dir .tmp/runs/<run-id>/send-qq-email/testdry-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;普通调用无需为此额外授权。