面向代理机构的 AI 邮件访问:一个智能体管理所有客户邮箱
代理机构、咨询公司或自由职业者如何让 AI 智能体访问多个客户邮箱而不会串号:每个客户一个工作区、按业务收窄的密钥、先只读后发送,以及每封外发邮件的人工审批。
Outlook 与 Microsoft 365 仍在开发中。 它们目前还无法在生产环境中连接,因此使用 Microsoft 365 的客户只能等待。今天可用的有:Google Workspace(默认使用 Google 应用专用密码通过 IMAP 连接,也支持 OAuth)、Zoho、Fastmail、Migadu、Titan、Rackspace、IONOS,以及任何标准 IMAP 服务商。
如果你同时为多个客户打理邮件,就必须守住一条规则:客户 A 的任何内容都不能出现在客户 B 的会话里。AI 智能体不会改变这条规则,只会让它更容易被打破。一个智能体持有一份能触达你所管理的每个邮箱的凭据,离"把错的发票引述给错的人"只差一条随手写下的提示词。
有三类失败值得在设计阶段就防住:跨客户泄漏,过宽的凭据让一次搜索命中了不该命中的邮箱;离场的外包同事,其电脑里仍留着一把可用的 API 密钥;以及无人复核的发送,智能体彬彬有礼地给客户的客户回了一封错误的邮件。把隔离建进访问本身,智能体就无法越界,哪怕提示词要求它这么做。
每个客户一个工作区
工作区是隔离的基本单位。邮箱、成员、API 密钥和活动记录都存放在同一个工作区内,边界由数据库的行级安全策略强制执行,而不是靠应用代码里小心翼翼的过滤。在 Acme 工作区签发的密钥无法读取 Bolt 的邮箱,无论提示词怎么写。
拥有多个工作区是 Team 方案的功能($79/月,$756/年),该方案同时提供不限人数的成员与角色、SSO(SAML / OIDC)、审计日志和优先支持。订阅绑定在你的账户上而非某一个工作区,因此一份 Team 订阅即可覆盖你创建的所有客户工作区。用客户名称命名每个工作区,只把该客户的邮箱连接进去,并在控制台侧边栏中切换。
Team 以下的方案都是一个人、一个工作区:Pro($15/月,$144/年)可连接不限数量的邮箱,Personal($5/月)三个,Free 一个。更便宜,但所有邮箱共享同一个影响半径。详见价格页与服务商对照表。
成员与角色
共有四种角色:owner(所有者)、admin、member 和 viewer。只有所有者可以更改角色。admin 可以邀请和移除成员,但不能移除另一位 admin。viewer 是只读的,这一点在凭据层同样强制执行:由 viewer 持有的密钥只能携带 read:email 和 search:email。
添加成员本身就是 Team 功能,因为 Free、Personal 和 Pro 都是单人方案。行之有效的安排是:某个客户的客户经理在该客户的工作区里是 admin,在其他工作区里没有任何成员身份;负责分拣的初级同事在他唯一参与的工作区里是 viewer;除你之外,没有任何一个账号能横跨你的全部客户。
按业务签发受限的 API 密钥
当客户端工具不支持 OAuth 时,智能体使用的就是 API 密钥。有两个旋钮可以收窄它,两个都要拧。
权限范围。 一把密钥携带一份取自以下词表的明确清单:read:email、search:email、send:email、manage:folders、delete:email、manage:drafts、manage:contacts、schedule:email、manage:automations。一把用于分拣的密钥只需要 read:email。把 manage:automations 当作其中最强的一项:自动化会在无人注视时持续执行。
邮箱范围。 一把密钥要么能触达工作区内的所有邮箱(包括以后才连接的),要么被限定在一份明确的邮箱清单内。做客户工作时,请限定它。
按业务或按自动化各签发一把密钥,并以其用途命名,这样吊销它就只是关于那一项工作的决定,而不是关于你整套配置的决定。明文密钥只显示一次,因为系统只保存 SHA-256 哈希值。
如果客户端工具支持 OAuth(Claude 和多数 MCP 客户端都支持),请改用这条路径并添加端点:
https://mcpemails.com/api/mcp
授权页面提供只读授权、标准授权和完全授权,另有逐项权限的选项。OAuth 与 API 密钥的对比说明了该如何选择。
先只读,后发送
每项业务都从只读开始。一个能够阅读、搜索和总结的智能体,已经覆盖了分拣、汇报以及"我们三月份到底答应了他们什么",而这正是大部分价值所在。
总结 Acme 支持邮箱在最近两个工作日内的未读邮件。分成三组:今天需要回复、正在等客户、以及噪音。不要发送、移动或删除任何内容。
需要时再一项一项地增加权限。给得太少是可以补救的:缺少某项权限的调用会返回一条明确的"权限不足"响应,客户端可以只就那一项权限申请提升后重试。
外发邮件的审批拦截
凡是会送达客户的客户的邮件,都请开启发送复核。这是一项按邮箱设置的开关,有三种模式:立即发送、在 AI 会话中显示复核卡片,或仅在控制台中复核。
在两种复核模式下,邮件都只是准备好而未投递,并且审批只可能发生在一个地方:由工作区所有者或 admin 持有的已登录浏览器会话。助手没有浏览器会话,因此无法批准自己的发送。它可以拒绝,而拒绝正是安全的方向。复核卡片是一种便利,而不是权限边界。
复核页面会展示发件人、收件人和抄送人、密送人的数量、主题、附件和正文,其中 HTML 以源码形式呈现而不会被渲染。待处理的请求在 24 小时后过期。该拦截在所有方案上都可用,包括 Free。更多内容见为 AI 智能体的邮件发送加上人工审批。
support@ 和 billing@ 这类共享邮箱
共享地址在这里就是普通邮箱。用服务商的应用专用密码连接 support@ 或 billing@,放进拥有它们的那个客户的工作区里。发件显示名称是按邮箱设置的,因此回复会以"Acme Support"而不是你的名义发出。
智能体用 inbox_list 找到邮箱并按名称寻址,所以你永远不必把邮箱 ID 粘贴进提示词。之后要用的工具并不多:email_read 和 email_compose,分拣用 email_organize 和 email_search_and_move,需要等人过目的则用 draft 和 schedule。
请尽早说清一个预期:MCP Emails 采用轮询方式。智能体只在你要求时,或在计划中的自动化运行时才去查看新邮件,因此"我们 60 秒内回复"并不是这套架构能给出的承诺。
交接与权限回收
在真正需要之前先演练一遍。下面每一项都是控制台里的一个动作。
- 吊销密钥。 它会立刻失效,无论被粘贴到了哪里。
- 移除成员。 这同时会吊销该成员在此工作区内创建的 API 密钥;成员自行退出时执行的也是同一套清理。
- 降级为 viewer。 降级会吊销其持有的、权限超出只读范围的密钥,而不是悄悄削弱一份别人仍在依赖的凭据。
- 断开邮箱。 存储的凭据是唯一被保留的邮箱数据,断开连接即会删除它。
- 同时在服务商侧撤销。 让客户删除应用专用密码或撤回 Google 授权。这条路径完全不经过你,而这正是它令人安心的原因。
系统没有所有权转移功能,因此项目结束时你无法把整个工作区交给客户。客户若要把邮件收回自己手里,需要注册自己的账户并连接自己的邮箱。
你能向客户承诺什么,不能承诺什么
可以白纸黑字写下来的说法:
- 邮件正文从不存储。每次请求都从客户的服务商处实时获取,返回后即丢弃。
- 唯一被保留的邮箱数据是服务商凭据,使用 AES-256-GCM 静态加密,密钥与数据分开保管。
- 活动只记录元数据:工具名称、邮箱、时间戳和状态,从不记录内容。
- 没有任何 AI 服务商是次处理方。MCP Emails 既不会把邮件发给自己选定的模型,也不会用它训练模型。次处理方是 Supabase、Vercel 和 Stripe。
- "从不存储"的唯一例外是被安排稍后发送的邮件,它会加密保存到发送时刻。
不要承诺提示词注入已被解决。它是被约束,而非被解决,这正是只读密钥、受限邮箱和审批拦截存在的理由。不要承诺即时反应,也不要承诺产品从未声明过的认证。把客户的安全审查人引向 /security,并让你的合同与那个页面保持一致,而不是走在它前面。代码是公开的,也可以自行部署,这比任何承诺都更能回应一次安全审查。
常见问题
每个客户都需要一个独立的 MCP Emails 账户吗? 不需要。一个账户、一份 Team 订阅,每个客户一个工作区。订阅跟随你的用户,因此每个工作区都会继承该方案。
一个客户能看到另一个客户的邮件吗? 只要每个客户的邮箱都在各自的工作区内,就不能。隔离由行级安全策略强制执行,在一个工作区签发的密钥无法读取另一个工作区的邮箱。
外包同事离场那天该做什么? 把他从工作区移除,这一步会同时吊销他在那里创建的密钥。如果他继续留下但不应再写入,就把他降级为 viewer。
使用 Microsoft 365 的客户能用吗? 暂时不能。相关支持仍在开发中,无法在生产环境中连接。Google Workspace、Zoho、Fastmail、Titan、IONOS 以及通用 IMAP 服务商今天都可以使用。
下一步
创建一个免费账户,以只读方式连接一个客户邮箱,先跑一条分拣提示词,再动别的。当隔离变得重要时,在价格页升级到 Team。文档提供完整的工具与权限参考,而 /security 正是你可以交给客户 IT 审查人的页面。