本文为 拆解 OpenClaw 10 | 养一只会帮你谈价砍单的龙虾 的实战补充。主文讲了养龙虾的五步法,第三步「教技能」里提到了邮件处理。这篇把收邮件、析邮件、拣收件箱的完整配置补全 —— 从 Skill 安装、.env 到 HEARTBEAT、AgentS。

两种方式:主动取(心跳轮询)和被动推(新邮件实时推送)。主动取配置简单,被动推需要 Tailscale + gcloud。
Docker 部署:支持。推荐用 imap-smtp-email + Gmail App Password(见下方「Docker 专用方案」),无需 gog、无需 OAuth,配环境变量即可。若坚持用 gog,需在宿主机完成 OAuth 后挂载 keyring 目录进容器。
本地 Docker(如 docker-compose.yml 挂载 OPENCLAW_CONFIG_DIR、OPENCLAW_WORKSPACE_DIR):Skill 装在宿主机 $OPENCLAW_WORKSPACE_DIR 下,.env 写在 Skill 目录,容器通过 volume 自动读到。
Docker 专用方案(推荐)
OpenClaw 跑在 Docker 里时,用 imap-smtp-email Skill 最省事:不走 OAuth,用 Gmail App Password,环境变量传进去就行。
1. 生成 Gmail App Password
-
登录 [Google 账号]https://myaccount.google.com/
-
开启两步验证(若未开启):[安全性与登录]https://myaccount.google.com/security → 左侧「安全性与登录」→ 主区域「您的 Google 账号登录选项」下的「两步验证」
-
进入 [App Passwords]https://myaccount.google.com/apppasswords,选「邮件」和「其他设备」,生成 16 位密码
2. 安装 imap-smtp-email Skill
在宿主机执行(需指定工作空间路径,与 docker-compose 的 OPENCLAW_WORKSPACE_DIR 一致):
# 若 OPENCLAW_WORKSPACE_DIR=~/.openclaw/workspace
cd ~/.openclaw/workspace
npx playbooks add skill openclaw/skills --skill imap-smtp-email
# 或指定目标目录(按你的 agent 结构)
npx playbooks add skill openclaw/skills --skill imap-smtp-email --path ~/.openclaw/workspace
3. 配置 Skill 环境变量
在 Skill 目录创建 .env。playbooks 安装后路径一般为:
-
• ~/.openclaw/workspace/.agents/skills/imap-smtp-email/.env
用 find 快速定位:find ~/.openclaw/workspace -name "imap-smtp-email" -type d
IMAP_HOST=imap.gmail.com
IMAP_PORT=993
IMAP_USER=xxxx@gmail.com
IMAP_PASS=你的16位AppPassword
IMAP_TLS=true
IMAP_MAILBOX=INBOX
或在 docker-compose 里通过 environment 传入(注意别把密码写进版本库)。
4. 确保容器能访问 Skill 的 env
若 Skill 的 .env 在挂载的 workspace 里,Agent 调用时能读到。若用 docker-compose 的 environment,需确认 OpenClaw 会把它们传给 Skill 子进程(依具体部署方式而定)。
5. HEARTBEAT 和 AGENTS 配置
在 ~/.openclaw/workspace/ 下编辑两个文件:

HEARTBEAT.md(心跳检查清单,Agent 按间隔执行):
# 心跳检查清单
- 检查来自重要联系人的紧急邮件
- 检查 2 小时内即将到来的日历事件
- 回顾最近每日记忆并更新 MEMORY.md
AGENTS.md(任务处理规则,告诉 Agent 怎么处理邮件):
## 任务处理规则
- 收到邮件:先分类(紧急/普通/可忽略),再按优先级处理
- 紧急的:摘要推给我,并提示需要尽快回复
- 普通的:起草回复草稿,等我确认后再发
- 可忽略的:标记已读,不打扰我
- 涉及删除、发送、支付:必须先给我看草稿,等我明确说「发」才能执行

TOOLS.md(可选,方便 Agent 知道用哪个邮箱):
- 邮箱: xxxx@gmail.com
6. 重启容器
在 OpenClaw 项目目录执行(确保 .env 里 OPENCLAW_CONFIG_DIR、OPENCLAW_WORKSPACE_DIR 已配置):
cd /path/to/openclaw # 如 digital-employee-platform/openclaw
docker compose restart openclaw-gateway
或 docker restart openclaw-gateway-1(容器名以实际为准)。
若坚持用 gog(Docker)
OpenClaw 官方镜像通常不含 gog。可选:
-
• 宿主机 OAuth + 挂载:在宿主机执行 gog auth add wuhoujin68@gmail.com --manual,完成授权后把~/.config/gogcli挂载进容器(映射到容器内 node 用户的对应路径),并设置环境变量GOG_KEYRING_PASSWORD。容器内需自行安装 gog(自定义镜像或启动时安装)。 -
• imap-smtp-email 更简单:无 gog、无 OAuth,适合 Docker。 -


方式一:主动取(本机 / 非 Docker 推荐)
Agent 按心跳间隔(默认 30 分钟)主动查收件箱。
1. 安装 gog
# macOS
brew install steipete/tap/gogcli
# 或
brew install gogcli
2. 创建 Google Cloud OAuth 客户端
-
1. 打开 Google Cloud Console -
2. 新建项目或选现有项目 -
3. 启用 Gmail API:APIs & Services → Library → 搜索 "Gmail API" → Enable -
4. 配置 OAuth 同意屏幕:APIs & Services → OAuth consent screen
-
• 用户类型选 External -
• 填应用名称、支持邮箱 -
• 添加范围: https://www.googleapis.com/auth/gmail.readonly(只读)或https://www.googleapis.com/auth/gmail.modify(读+草稿) -
• 测试用户里添加 wuhoujin68@gmail.com(若应用在 Testing 模式) -
• 个人用建议点 PUBLISH APP,否则令牌 7 天过期
-
5. 创建凭据:APIs & Services → Credentials → Create Credentials → OAuth client ID -
• 应用类型选 Desktop app -
• 下载 JSON 文件(如 client_secret_xxx.json)
3. 用 gog 完成 OAuth 授权
# 注册 OAuth 客户端
gog auth credentials /path/to/client_secret_xxx.json
# 授权账号(会打开浏览器)
gog auth add wuhoujin68@gmail.com --services gmail
# 无头环境用 --manual
# gog auth add wuhoujin68@gmail.com --services gmail --manual --force-consent
4. 验证
gog gmail search 'is:unread' --max 5 --account wuhoujin68@gmail.com
能列出未读邮件即成功。
5. 安装 gmail-oauth 或 gmail Skill
npx playbooks add skill openclaw/skills --skill gmail-oauth
# 或
npx playbooks add skill openclaw/skills --skill gmail
6. 在 Agent 工作空间配置
TOOLS.md 里加一行(可选,方便 Agent 知道用哪个账号):
- 邮箱: wuhoujin68@gmail.com
HEARTBEAT.md 里加收件箱检查:
# 心跳检查清单
- 扫描 wuhoujin68@gmail.com 收件箱,有紧急邮件摘要推给我
AGENTS.md 里说明任务规则(可选):
## 任务处理规则
- 收到邮件:先分类(紧急/普通/可忽略),再按优先级处理。紧急的摘要推给我,普通的起草回复等我确认
7. 重启 OpenClaw 或等下次心跳
Agent 会按 HEARTBEAT 间隔调用 gog gmail search 查未读,并推摘要给你。
方式二:被动推(实时)
新邮件到达时,Gmail 通过 Pub/Sub 推给 OpenClaw,实时性更好。需要 Tailscale、gcloud、Google Cloud 项目。
前置条件
-
• Tailscale 已登录 -
• gcloud 已安装并登录 -
• gog 已完成方式一的 1–4 步
一键配置(推荐)
openclaw webhooks gmail setup --account wuhoujin68@gmail.com
该命令会:
-
• 启用 Gmail hook 预设 -
• 配置 hooks.gmail -
• 用 Tailscale Funnel 作为公网推送端点 -
• 在 macOS 上自动安装 gcloud、gogcli、tailscale(通过 brew)
手动配置(若一键失败)
-
1. 选 GCP 项目(需与 gog OAuth 客户端同项目):
gcloud auth login
gcloud config set project <你的项目ID>
-
2. 启用 API:
gcloud services enable gmail.googleapis.com pubsub.googleapis.com
gcloud pubsub topics create gog-gmail-watch
-
3. 授权 Gmail 推送:
gcloud pubsub topics add-iam-policy-binding gog-gmail-watch
--member=serviceAccount:gmail-api-push@system.gserviceaccount.com
--role=roles/pubsub.publisher
-
4. 启动 Gmail Watch:
gog gmail watch start
--account wuhoujin68@gmail.com
--label INBOX
--topic projects/<项目ID>/topics/gog-gmail-watch
-
5. 运行推送处理:
openclaw webhooks gmail run
或依赖 Gateway 自动启动(hooks.enabled=true 且 hooks.gmail.account 已配置时)。
配置投递到聊天
在 openclaw.json 的 hooks 里加 mapping,让新邮件推到你用的渠道(如微信、钉钉):
{
hooks: {
enabled: true,
token: "OPENCLAW_HOOK_TOKEN",
presets: ["gmail"],
mappings: [
{
match: { path: "gmail" },
action: "agent",
deliver: true,
channel: "last",
messageTemplate: "新邮件 from {{messages[0].from}}nSubject: {{messages[0].subject}}n{{messages[0].snippet}}"
}
]
}
}
权限建议
-
• 只收邮件:OAuth 范围用 gmail.readonly -
• 收 + 起草回复:用 gmail.modify,但 AGENTS.md 里写清楚「起草必须等我确认才能发」 -
• 不建议给发送权限,除非你接受 Agent 自主发邮件(参见 Day 12 保险理赔翻车故事)

