📬 Gmail收件箱代理——Gemini分类器+拒绝起草器
一个智能的n8n代理工作流程,使用Google Gemini AI自动对您的Gmail收件箱进行分类,应用智能标签,并为拒绝工作的电子邮件起草个性化的反馈回复——所有这些都是免提的,每小时一次。
______________________________________________________________________
🎬 演示
https://github.com/user-attachments/assets/4e809ae2-f094-4821-8e6b-a4666fc30359
🤖 克劳德桌面+MCP集成
此工作流程可通过以下方式完全访问 克劳德桌面版 通过与n8n的MCP(模型上下文协议)集成。
通过将n8n的MCP服务器连接到Claude Desktop,您可以:
- 通过自然语言触发此工作流 --只需让Claude运行您的Gmail收件箱代理
- 监控工作流执行 在Claude桌面聊天中
- 列出、搜索和执行 不打开n8n UI的任何n8n工作流
运作原理
Claude Desktop ──MCP──▶ n8n MCP Server ──▶ n8n Workflow Engine ──▶ Gmail + Gemini APIs设置MCP访问权限在 MCP集成 下面的部分。
______________________________________________________________________
📋 目录
______________________________________________________________________
🌟 概述
这 Gmail收件箱代理 是一个自主的代理n8n工作流,旨在消除手动收件箱管理。它每小时运行一次,获取最近未处理的电子邮件,并将其发送到 谷歌双子座2.5 Flash 对于人工智能分类,自动应用Gmail标签,并且——特别是对于拒绝工作的电子邮件——起草一份精美的、专业的反馈请求回复。
主要特点
| 特性 | 描述 |
|---|---|
| ⏰ 每小时自动化 | 通过时间表触发器每小时运行一次 |
| 🤖 AI分类 | Gemini 2.5 Flash将电子邮件分为3类 |
| 🏷️ 自动标签 | 动态应用Gmail标签,如果缺少则创建标签 |
| ✉️ 草稿回复 | 自动生成拒绝反馈请求草稿 |
| 🔁 MCP可访问 | 可通过n8n MCP从克劳德桌面完全触发 |
| 🚫 自我过滤 | 跳过自己发送的电子邮件 |
电子邮件类别
AI将每封电子邮件精确地分为以下几类:
Job-Application-RelatedAction-NeededGeneral-Purpose
______________________________________________________________________
🔀 架构与信息流
┌──────────────────────────────────────────────────────────────────────────────┐
│ GMAIL INBOX AGENT WORKFLOW │
└──────────────────────────────────────────────────────────────────────────────┘
┌─────────────────┐
│ ⏰ Run Every │ Triggers every hour (Europe/Berlin timezone)
│ Hour │ Outputs: timestamp metadata
└────────┬────────┘
│
▼
┌─────────────────┐
│ 📥 Get │ Gmail API: Fetches all emails matching:
│ Unprocessed │ newer_than:1d -label:processed -in:draft
│ Emails │ Outputs: raw Gmail message objects
└────────┬────────┘
│
▼
┌─────────────────┐
│ 🔍 Skip Emails │ Filter: Removes emails where From contains
│ Sent By Me │ your own Gmail address
└────────┬────────┘
│
▼
┌─────────────────┐
│ 🔨 Build Gemini │ Code node: Constructs Gemini API payload.
│ Payload │ Extracts: messageId, threadId, from,
│ │ subject, snippet → builds classify prompt
└────────┬────────┘
│
▼
┌─────────────────┐
│ 🤖 Gemini: │ HTTP POST to Gemini 2.5 Flash API
│ Classify │ Returns: category, is_rejection, draft_reply
│ Email │ (structured JSON via responseMimeType)
└────────┬────────┘
│
▼
┌─────────────────┐
│ 🔧 Parse Gemini │ Code node: Parses AI response JSON.
│ Response │ Maps: category → labelName (spaces→dashes)
│ │ Falls back gracefully on parse errors
└────────┬────────┘
│
▼
┌─────────────────┐
│ 📋 Get All │ Gmail API: Fetches full list of existing
│ Gmail Labels │ labels (id + name) for the account
└────────┬────────┘
│
▼
┌─────────────────┐
│ 🔎 Check Which │ Code node: Compares needed labels vs
│ Labels Exist │ existing labels. Builds labelsToCreate[]
│ │ and existingLabelIds map
└────────┬────────┘
│
▼
┌─────────────────────────────────────┐
│ ❓ New Labels Needed? │
│ labelsToCreate.length > 0 ? │
└────┬───────────────────────────┬────┘
│ YES │ NO
▼ │
┌─────────────┐ │
│ 📝 Expand │ │
│ Labels │ │
│ To Create│ │
└──────┬──────┘ │
▼ │
┌─────────────┐ │
│ 🏷️ Create │ │
│ Missing │ │
│ Label │ │
└──────┬──────┘ │
│ │
└──────────┬──────────────┘
▼
┌─────────────────┐
│ 🔗 Merge — │ Code node: Re-merges both branches.
│ Restore │ Restores full email context from
│ Email Context│ "Check Which Labels Exist" node
└────────┬────────┘
│
▼
┌─────────────────┐
│ 🏷️ Apply │ Gmail API: Applies the AI-determined
│ Category │ category label to the email
│ Label │
└────────┬────────┘
│
▼
┌─────────────────────────────────────┐
│ ❓ Is Job Rejection? │
│ is_rejection === true ? │
└────┬───────────────────────────┬────┘
│ YES │ NO
▼ ▼
┌─────────────┐ ┌─────────────┐
│ ✉️ Create │ │ 🏷️ Label: │
│ Draft │ │ Processed│
│ Feedback │ │ (Normal) │
│ Reply │ └─────────────┘
└──────┬──────┘
▼
┌─────────────┐
│ 🏷️ Label: │
│ Draft- │
│ Created │
└──────┬──────┘
▼
┌─────────────┐
│ 🏷️ Label: │
│ Processed│
│ (Rejection)│
└─────────────┘______________________________________________________________________
🧩 工作流节点——完整分解
1.⏰ 每小时跑步
类型: n8n-nodes-base.scheduleTrigger
按小时计划启动工作流程。已配置为 Europe/Berlin 时区。向下游输出当前时间戳元数据。
______________________________________________________________________
2.📥 获取未处理的电子邮件
类型: n8n-nodes-base.gmail (getAll操作)
从Gmail中获取所有匹配的电子邮件:
newer_than:1d -label:processed -in:draft这确保了只处理新的(过去24小时)未处理的非草稿电子邮件。返回完整的Gmail邮件对象。
______________________________________________________________________
3.🔍 跳过我发送的电子邮件
类型: n8n-nodes-base.filter
过滤掉任何电子邮件,其中 From 字段包含您自己的Gmail地址。这会阻止工作流处理您自己发送的电子邮件。
条件: From 做 不 包含 ``
______________________________________________________________________
4.🔨 构建Gemini有效载荷
类型: n8n-nodes-base.code (JavaScript)
构造Gemini的请求有效负载。从Gmail邮件中提取关键字段:
messageId,threadId,from,subject,snippet
构建详细的分类提示,指示Gemini:
- 分为3类
- 检测是否是拒绝工作(
is_rejection: true/false) - 如果拒绝:在 相同语言 作为电子邮件,不超过150字
用途 responseMimeType: "application/json" 用于结构化输出。
______________________________________________________________________
5.🤖 双子座:对电子邮件进行分类
类型: n8n-nodes-base.httpRequest
端点:
POST https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=YOUR_API_KEY发送Gemini有效负载,并通过以下方式接收结构化JSON:
{
"category": "Job-Application-Related",
"is_rejection": true,
"draft_reply": {
"subject": "Re: Your Application",
"body": "Dear Hiring Team, ..."
}
}______________________________________________________________________
6.🔧 解析Gemini响应
类型: n8n-nodes-base.code (JavaScript)
分析原始Gemini API响应。提取文本内容,解析JSON,并映射 category 到一个 categoryLabel (空格被破折号替换为有效的Gmail标签名称)。
退路: 如果解析失败,则默认为 General-Purpose, is_rejection: false.
______________________________________________________________________
7.📋 获取所有Gmail标签
类型: n8n-nodes-base.gmail (标签→ 列表操作)
获取已验证帐户的现有Gmail标签的完整列表。用于在创建AI确定的标签之前检查其是否已存在。
______________________________________________________________________
8.🔎 检查存在哪些标签
类型: n8n-nodes-base.code (JavaScript)
比较所需的标签(categoryLabel + processed)与现有的Gmail标签相比。输出:
labelsToCreate[]--需要创建的标签existingLabelIds--地图name → id对于所有当前标签
______________________________________________________________________
9. ❓ 需要新标签吗?
类型: n8n-nodes-base.if
如果满足以下条件,则路由到标签创建分支 labelsToCreate.length > 0,否则直接跳到合并。
______________________________________________________________________
10. 📝 展开要创建的标签
类型: n8n-nodes-base.code (JavaScript)
由于IF节点输出单个项目,因此这会拆分 labelsToCreate[] 每个标签对应一个项目,以便下一个节点可以创建每个项目。
______________________________________________________________________
11. 🏷️ 创建缺失标签
类型: n8n-nodes-base.gmail (标签→ 创建操作)
创建新的Gmail标签。在中每个标签运行一次 labelsToCreate 阵列。
______________________________________________________________________
12. 🔗 合并--还原电子邮件上下文
类型: n8n-nodes-base.code (JavaScript)
在标签创建分支(或旁路)之后,这将从重新获取完整的电子邮件上下文 Check Which Labels Exist 节点。这是必要的,因为标签创建循环会拆分项目,否则上下文将丢失。
______________________________________________________________________
13. 🏷️ 应用类别标签
类型: n8n-nodes-base.gmail (添加标签操作)
使用AI确定的类别标签将其应用于电子邮件 messageId.
______________________________________________________________________
14. ❓ 工作被拒绝了吗?
类型: n8n-nodes-base.if
检查是否 is_rejection === true 双子座分类。创建草稿的路径(是)或正常处理路径(否)。
______________________________________________________________________
15. ✉️ 创建反馈回复草稿 *(仅限拒绝路径)*
类型: n8n-nodes-base.gmail (草案→ 创建操作)
使用Gemini生成的内容创建Gmail草稿回复:
- 致: 原寄件人
- 主题: 从
draft_reply.subject - 主体: 从
draft_reply.body - 主题: 附在原始电子邮件帖子中
______________________________________________________________________
16. 🏷️ 标签:草稿已创建 *(拒绝路径)*
类型: n8n-nodes-base.gmail (添加标签)
添加a Draft-Created 在电子邮件上贴上标签,这样你就知道已经为它生成了草稿。
______________________________________________________________________
17. 🏷️ 标签:已处理(拒收路径)
类型: n8n-nodes-base.gmail (添加标签)
将电子邮件标记为 processed 因此,在下一个小时的跑步中,它不会再被捡起。
______________________________________________________________________
18. 🏷️ 标签:已处理(正常路径)
类型: n8n-nodes-base.gmail (添加标签)
与上述相同,但适用于非拒绝电子邮件。标记为 processed 以防止再加工。
______________________________________________________________________
📦 先决条件
- n8n (自托管,建议v1.x或更高版本)-- 安装n8n
- 谷歌账户 启用Gmail
- 谷歌云项目 与:
- Gmail API已启用 - 生成语言(Gemini)API已启用
- Node.js v18+(适用于n8n)
- *(可选)* 克劳德桌面版 用于MCP集成
______________________________________________________________________
🔐 身份验证设置
1.Gmail OAuth2(用于Gmail节点)
- 首选 谷歌云控制台
- 创建新项目或选择现有项目
- 导航至 API和服务→ 图书馆
- 搜索并启用 Gmail API
- 首选 API和服务→ 凭证
- 点击 创建凭证→ OAuth 2.0客户端ID
- 应用程序类型: Web应用程序 - 授权重定向URI: https://your-n8n-instance.com/rest/oauth2-credential/callback
- 复制 客户端ID 和 客户端密钥
- 在n8n中,转到 凭证→ 添加凭据→ Google OAuth2 API
- 粘贴您的客户端ID和客户端密码
- 点击 使用 Google 登录 并授权访问
⚠️ 请确保启用以下Gmail OAuth作用域: -https://www.googleapis.com/auth/gmail.readonly-https://www.googleapis.com/auth/gmail.labels-https://www.googleapis.com/auth/gmail.modify-https://www.googleapis.com/auth/gmail.compose
______________________________________________________________________
2.Gemini API密钥(用于HTTP请求节点)
- 首选 Google AI 工作室
- 点击 创建API密钥
- 复制API密钥
- 在工作流中,打开 🤖 双子座:对电子邮件进行分类 节点
- 在URL字段中,替换
YOUR_API_KEY使用您的实际密钥:
https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=YOUR_API_KEY💡 或者,将密钥存储为n8n凭据(HTTP Header Auth),以提高安全性。
______________________________________________________________________
3.更新您的电子邮件过滤器
在 🔍 跳过我发送的电子邮件 节点,更新筛选条件:
From does not contain → your-email@gmail.com替换为您的实际Gmail地址。
______________________________________________________________________
📥 安装和导入
步骤1:克隆此仓库
git clone https://github.com/YOUR_USERNAME/gmail-inbox-agent.git
cd gmail-inbox-agent步骤2:将工作流导入n8n
- 打开n8n实例
- 点击 工作流→ 从文件导入
- 选择
workflow.json来自此repo - 点击 导入
步骤3:配置凭据
- 分配您的 谷歌OAuth2 所有Gmail节点的凭据
- 设置您的 Gemini API密钥 在HTTP请求节点URL中
- 在筛选器节点中更新您的电子邮件地址
步骤4:激活
将工作流切换到 活跃的 --现在它将每小时自动运行一次。
______________________________________________________________________
🔌 MCP与Claude Desktop的集成
此工作流是通过以下方式构建和积极管理的 克劳德桌面版 使用n8n的MCP(模型上下文协议)服务器。这允许您通过Claude中的自然语言与n8n工作流进行交互。
安装说明
1.在n8n中启用MCP
在n8n实例设置中,启用MCP服务器功能并在以下项下生成API令牌:
Settings → API → Create API Token (with MCP scope)2.配置克劳德桌面
编辑您的Claude Desktop配置文件:
- 窗户:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
添加以下内容 mcpServers 块:
{
"mcpServers": {
"n8n-mcp": {
"command": "npx",
"args": [
"-y",
"supergateway",
"--streamableHttp",
"http://localhost:5678/mcp-server/http",
"--header",
"authorization:Bearer YOUR_N8N_API_TOKEN"
]
}
}
}替换 YOUR_N8N_API_TOKEN 其中令牌是在步骤1中生成的。
3.在启动Claude Desktop之前启动n8n
始终确保您的n8n实例在以下时间完全运行 http://localhost:5678 在打开Claude Desktop之前。MCP连接在启动时建立。
4.重新启动克劳德桌面
完全退出并重新打开Claude Desktop。现在,您应该看到n8n被列为已连接的工具。
使用Claude运行此工作流
连接后,您可以直接从Claude Desktop触发此工作流:
"Execute my Gmail inbox agent workflow"
"Run the Gemini email classifier"
"List my n8n workflows"
"Search for my job application workflow"Claude将调用n8n MCP工具,执行工作流程,并在聊天中向您报告结果。
______________________________________________________________________
⚙️ 配置
| 设置 | 位置 | 默认值 | 描述 |
|---|---|---|---|
| 电子邮件回顾窗口 | 📥 Get Unprocessed Emails → 查询 | newer_than:1d | 取回电子邮件的时间有多远 |
| 您的电子邮件地址 | 🔍 Skip Emails Sent By Me → 过滤器 | your-email@gmail.com | 要排除的电子邮件 |
| Gemini模型 | 🤖 Gemini: Classify Email → URL | gemini-2.5-flash | 必要时更改型号 |
| 计划间隔 | ⏰ Run Every Hour → 规则 | 每1小时一次 | 代理多久运行一次 |
| 时区 | 工作流设置 | Europe/Berlin | 调整到您的时区 |
| 草稿回复最大字数 | 🔨 Build Gemini Payload → prompt | 150字 | AI生成草稿的最大长度 |
______________________________________________________________________
🚀 如何使用
一旦激活,工作流每小时都会完全自主运行。事情是这样的:
- 每小时,工作流会唤醒并检查Gmail
- 新电子邮件 最近24小时(尚未标记
processed)已取回 - 每封电子邮件 被Gemini AI归为一类
- 标签已应用 自动——如果需要,会动态创建新标签
- 拒绝工作 获取在“草稿”文件夹中创建的反馈请求答复草稿
- 所有已处理的电子邮件 被标记
processed避免再加工
你将在Gmail中看到什么
运行几次后,您的Gmail将具有:
Job-Application-Related相关电子邮件上的标签Action-Needed需要您注意的电子邮件标签General-Purpose在其他所有东西上贴标签Draft-Created在起草草稿的拒绝电子邮件上贴上标签processed所有已处理电子邮件上的标签- 准备好回复草稿以供审查并发送以拒绝工作
______________________________________________________________________
🛠️ 故障排除
| 问题 | 可能原因 | 修复 |
|---|---|---|
| 工作流未显示任何电子邮件 | 所有已标记的电子邮件 processed | 删除 processed 从某些电子邮件中添加标签以重新处理 |
| Gemini分类失败 | API密钥无效或过期 | 在重新生成密钥 AI 工作室 并更新URL |
| Gmail身份验证错误 | OAuth令牌已过期 | 在n8n凭据中重新授权 |
| 标签未创建 | Gmail范围不足 | 使用上面列出的完整范围重新授权 |
| Claude Desktop找不到n8n | 在Claude启动之前n8n未运行 | 始终先启动n8n,然后重新启动Claude Desktop |
| Claude Desktop中的MCP超时 | n8n响应时间过长 | 请检查n8n的运行状况 http://localhost:5678 |
| 用错误的语言起草回复 | Gemini默认为英语 | 提示指示使用相同的语言回复——检查电子邮件片段质量 |
______________________________________________________________________
📁 仓库结构
gmail-inbox-agent/
├── README.md ← You are here
└── workflow.json ← n8n workflow export (import this into n8n)______________________________________________________________________
📄 许可证
MIT许可证——可以自由分叉、修改和共享。
______________________________________________________________________
🙏 致谢
- n8n --工作流自动化平台
- 谷歌双子座 --AI分类引擎
- Anthropic Claude --用于通过MCP构建、测试和管理此工作流
- 超级通道 --n8n的MCP电桥
______________________________________________________________________
*建于❤️ 并通过Claude Desktop+n8n MCP集成实现自动化*
