1. 为什么我要把邮箱交给一个 Agent 打理
每天打开电脑第一件事就是刷收件箱,这个动作我重复了太多年。咨询、协作、通知、广告混在一起,真正需要我动脑回复的可能不到三成,剩下七成都是「收到」「好的」「稍后同步」这类机械动作。AI 邮件秘书要解决的就是这件事:让一个跑在本地的 OpenClaw Agent 定时扫未读邮件,判断意图,按规则草拟回复,常规的直接发,重要的留草稿等我审核,垃圾的标记归档。
它适合谁?适合每天被邮件追着跑、又不想把邮箱密码交给来路不明云服务的职场人。整套东西跑在你自己的机器上,邮箱走 IMAP/SMTP 标准协议,模型调用走 TaoToken 的统一 Key,收信、分析、草拟、发送四个动作全部可追溯。下面我把 163 邮箱授权、config.toml 与 settings.json 骨架、Agent 工具链、收信触发到发送验证的完整链路拆开讲,你照着敲就能跑通个人职场邮件自动化闭环。
2. TaoToken 前置:统一 Key 与模型接入
OpenClaw Agent 的「大脑」需要模型推理能力,意图分类、语气模仿、回复草拟都靠它。我选 TaoToken 的原因很直接:一个 Key 打通多家模型,Agent 配置里只维护一处 base_url 和 api_key,换模型不用改业务代码。官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 入口是 https://taotoken.net/api ,注意 API 地址不带 UTM 参数。
先去控制台建 Key:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,在 API Keys 页面生成:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。生成后复制那串 sk- 开头的字符串,后面写进环境变量,不要硬编码进配置文件。
模型选择上,邮件意图分类和短回复用轻量模型就够,长邮件总结和复杂草拟再切强一点的模型。TaoToken 的模型对话页可以先试效果:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite ,拿几封真实邮件贴进去,看它分类准不准、语气像不像你,心里有底再写进 Agent 规则。
如果你后面要把这套邮件 Agent 扩展成长期跑的编码或办公 Agent,可以看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,额度模型更适合常驻心跳任务。接入细节和参数说明在文档里:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。
3. 可复制配置:config.toml 与 settings.json 骨架
OpenClaw 的配置分两层:config.toml 管模型与运行时,settings.json 管 Agent 行为与邮箱账户。先建目录:
mkdir -p ~/.openclaw/agents ~/.openclaw/workspace cd ~/.openclaw/workspace npx playbooks add skill openclaw/skills --skill imap-smtp-email装完邮件技能后,写 config.toml。这里的关键是把模型指向 TaoToken,Key 从环境变量读:
# ~/.openclaw/config.toml [model] provider = "openai-compatible" base_url = "https://taotoken.net/api" api_key_env = "TAOTOKEN_API_KEY" default_model = "gpt-4o-mini" fallback_model = "claude-3-5-sonnet" [runtime] workspace = "~/.openclaw/workspace" log_level = "info" heartbeat_default = "10m" [secrets] email_auth_code_env = "EMAIL_AUTH_CODE"settings.json 是 Agent 的核心,邮箱账户、心跳、分级策略、安全红线都在这里:
{ "agent": { "name": "email-secretary", "heartbeat": { "every": "10m" }, "model": { "profile": "default", "temperature": 0.4 } }, "email": { "imap": { "host": "imap.163.com", "port": 993, "secure": true, "user": "yourname@163.com", "auth_code_env": "EMAIL_AUTH_CODE" }, "smtp": { "host": "smtp.163.com", "port": 465, "secure": true, "user": "yourname@163.com", "auth_code_env": "EMAIL_AUTH_CODE" }, "folder": { "inbox": "INBOX", "archive": "Archive" } }, "policy": { "auto_reply": ["inquiry", "coordination"], "draft_only": ["important", "vip"], "never_send": ["vip", "urgent"], "spam_action": "mark_read_and_archive" }, "soul": { "signature": "AI 邮件秘书(代发)", "tone": "礼貌、简洁、与来信风格一致" } }163 邮箱必须用授权码,不能用登录密码。登录网页版 mail.163.com,进设置 → POP3/SMTP/IMAP,开启 IMAP/SMTP 服务,点新增授权码,按提示发短信验证,拿到 16 位授权码。然后设环境变量:
export TAOTOKEN_API_KEY="sk-你的TaoToken密钥" export EMAIL_AUTH_CODE="你复制的16位授权码"把 Agent 配置载入:
cp settings.json ~/.openclaw/agents/email-secretary.json4. 验证请求:收信触发、草拟回复、发送验证
启动 OpenClaw 后在对话界面激活 Agent:
/agent email-secretary激活后 Agent 按 heartbeat 每 10 分钟扫一次 INBOX 未读。想立刻验证,手动触发一次心跳:
/openclaw heartbeat run email-secretary --once我试过用一封测试邮件走完整链路。发件人 friend@example.com,主题「周末有空吗」,正文问周末能否讨论项目方案。Agent 拉到邮件后先调模型做意图分类,返回 coordination,命中 auto_reply 策略,于是生成回复:
收件人:friend@example.com 主题:Re: 周末有空吗? 内容: 您好, 感谢来信。关于周末讨论项目方案,我周六下午两点后有空。 如果这个时间方便,我们可以线上会议沟通。 期待回复。 祝好, AI 邮件秘书(代发)发送走 SMTP,端口 465 SSL。验证发送是否成功,看日志:
tail -f ~/.openclaw/logs/email-secretary.log | grep -E "SMTP|SEND|DRAFT"成功会打印SMTP 250 OK和消息 ID。如果命中 draft_only,日志显示DRAFT saved,邮件进草稿箱等你审核。VIP 或 urgent 命中 never_send,Agent 只生成草稿并标记,绝不自动发。垃圾邮件走 mark_read_and_archive,标已读并移到 Archive。
想单独测模型连通性,用 curl 打一次 TaoToken:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"把这句话分类:咨询/协作/通知/垃圾——周末有空讨论方案吗"}]}'返回 JSON 里 choices[0].message.content 就是分类结果。这一步通了,说明 Key 和网络都没问题,剩下就是 Agent 规则调优。
5. 本篇常见错排查
Agent 不自动检查邮件:先确认/agent email-secretary激活成功,再查EMAIL_AUTH_CODE是否 export 到当前终端,最后确认 163 网页端 IMAP/SMTP 服务已开启。三者缺一都会静默失败。
登录失败或授权码错误:163 必须用授权码,不是邮箱密码。授权码前后不能有空格,复制时容易带上换行。重新生成一个再试。
SMTP 发送超时:163 的 SMTP 用 465 SSL,不是 587。settings.json 里 port 写 465、secure 写 true。写错端口会卡在连接阶段。
模型返回 401:TaoToken Key 没设对,或者 base_url 写成了带 UTM 的地址。API 地址就是 https://taotoken.net/api ,不要加参数。
回复语气不像我:调 settings.json 里 soul.tone,或者把几封你以前写的邮件贴进模型对话页做 few-shot,再把风格描述写进 soul 字段。temperature 调到 0.3 到 0.5 之间,太高会飘。
想临时停自动回复:对话里输入/agent stop暂停,/agent start恢复。别直接杀进程,心跳状态会丢。
6. 把邮件闭环跑成日常
整套跑通后,我每天只做两件事:早上扫一眼草稿箱审核重要邮件,其余时间 Agent 自己转。常规咨询自动回,协作邮件草拟待审,垃圾归档,VIP 和紧急件永远不自动发。这个安全红线机制是整套配置里我最看重的部分,AI 再准也有误判,关键邮件必须留人工闸门。
如果你要把这套 Agent 扩展成常驻的编码或办公助手,Coding Plan 的额度模型更适合长时间心跳任务:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。接入参数和工具链细节在文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。Key 管理在 API Keys 页:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。先把 163 这一条链路跑稳,再往上叠规则,别一上来就配十几条策略,调不过来。