Files
atlas/blogwatcher-daily/references/agentmail-sending.md

2.5 KiB
Raw Permalink Blame History

AgentMail 发送邮件工作流(配合 blogwatcher-daily 等导出技能)

从 blogwatcher-daily 的 SKILL.md 中拆出,因为「AgentMail 发信」是独立于「RSS 抓取导出」的能力。任何需要先导出再发邮件的场景都可复用。

前置条件

  • agentmail CLI 已安装(/opt/homebrew/bin/agentmail)
  • API key 在 ~/.zshrc 的 AGENTMAIL_API_KEY 里(当前 Hermes shell 不会自动加载 .zshrc,需手动 source 或提取)
  • 出站网络需要走代理:ALL_PROXY=socks5://127.0.0.1:10808(否则 agentmail API 返回 403 被 CloudFront 拦截)

标准发送流程

# 1) 提取 API key + 设置代理(每次新 shell 都要做)
export AGENTMAIL_API_KEY=$(grep '^export AGENTMAIL_API_KEY=' ~/.zshrc | sed 's/.*="\(.*\)"/\1/')
export ALL_PROXY=socks5://127.0.0.1:10808
export HTTP_PROXY=http://127.0.0.1:10808
export HTTPS_PROXY=http://127.0.0.1:10808

# 2) 列出 inbox 拿 inbox_id(首次;一般是 star-agent@agentmail.to)
agentmail inboxes list

# 3) 发送(--html 直接读 HTML 内容字符串)
agentmail inboxes messages send \
  --inbox-id "star-agent@agentmail.to" \
  --to "billyshen@163.com" \
  --subject "主题" \
  --html "$(cat /tmp/file.html)"

返回 JSON:

{
  "message_id": "<...>@email.amazonses.com",
  "thread_id": "..."
}

常见陷阱

1. 403 "Request blocked"

  • 没走代理。CloudFront 拦了直连 IP。
  • 修复:export 上面 3 个 PROXY 环境变量后重试。

2. 401 "credentials are missing"

  • 当前 shell 没加载 .zshrc,AGENTMAIL_API_KEY 不在环境里。
  • 修复:用上面的 export $(grep ...) 提取。

3. HTML 太长

  • --html "$(cat file)" 把整个文件塞进命令行参数。对很大的 HTML(>500KB)可能撞到 ARG_MAX。
  • 应对:先压缩 HTML(去掉 base64 图片、压缩 CSS),或者改用 --json @payload.json 走 stdin。

与 blogwatcher-daily 配合的固定模式

# 导出 → 发邮件
python3 ~/.hermes/skills/custom/blogwatcher-daily/scripts/blogwatcher-daily.py \
  --export html --date 2026-08-30 > /tmp/digest.html

agentmail inboxes messages send \
  --inbox-id "star-agent@agentmail.to" \
  --to "billyshen@163.com" \
  --subject "Blogwatcher Daily Digest $(date +%Y-%m-%d)" \
  --html "$(cat /tmp/digest.html)"

当前用户的 inbox

  • star-agent@agentmail.to(默认发件箱)

已发送示例