8
n8n 中文网amn8n.com

使用Gmail和GPT摘要自动发送每日邮件摘要

中级

这是一个Personal Productivity, AI Summarization领域的自动化工作流,包含 6 个节点。主要使用 Cron, Gmail, OpenAi, Function 等节点。 使用Gmail和GPT摘要自动发送每日邮件摘要,每天下午发送

前置要求
  • Google 账号和 Gmail API 凭证
  • OpenAI API Key

使用的节点 (6)

工作流预览
可视化展示节点连接关系,支持缩放和平移

无法加载工作流预览

导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "nodes": [
    {
      "name": "下午触发器(下午4点)",
      "type": "n8n-nodes-base.cron",
      "notes": {
        "text": "### 1. Trigger in the Afternoon\n\nThis `Cron` node is configured to run automatically every **day at 4:00 PM (16:00)** based on your n8n server's local time zone.\n\n**To change the schedule:** Adjust the 'Hour' and 'Minute' fields to your preferred time.",
        "position": "right"
      },
      "position": [
        240,
        300
      ],
      "parameters": {
        "mode": "everyDay",
        "value": {
          "hour": [
            16
          ],
          "minute": [
            0
          ]
        },
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "name": "计算今日日期",
      "type": "n8n-nodes-base.function",
      "notes": {
        "text": "### 2. Calculate Today's Dates\n\nThis `Function` node calculates the start of the current day (midnight) and the current time, which will be used to fetch emails received *today* up to the moment the workflow runs.\n\n**Output:** It generates two fields:\n* `minDate`: The ISO string for today's midnight (00:00:00).\n* `nowDate`: The ISO string for the current time (when the workflow runs).\n\n**No configuration needed here**; it automatically determines the dates.",
        "position": "right"
      },
      "position": [
        480,
        300
      ],
      "parameters": {
        "options": {},
        "function": "const DateTime = this.getNodeParameter('DateTime');\n\nconst now = DateTime.now();\n\n// Calculate the start of the current day (e.g., today at 00:00:00)\nconst startOfDay = now.startOf('day');\n\nreturn [{ json: { \n  minDate: startOfDay.toISO(),\n  nowDate: now.toISO()\n} }];"
      },
      "typeVersion": 1
    },
    {
      "name": "获取今日邮件(Gmail)",
      "type": "n8n-nodes-base.gmail",
      "notes": {
        "text": "### 3. Get Today's Emails\n\nThis `Gmail` node fetches emails received in your inbox since the beginning of the current day until the workflow is triggered.\n\n**Setup:**\n1.  **Gmail Credential:** Click on 'Credentials' and select 'New Credential'. Choose 'Gmail API'. Follow the n8n instructions to connect your Gmail account.\n2.  **Query:** The 'Query' field uses Gmail's search operators (`after:` and `before:`) combined with the dates calculated in the previous node to ensure it only fetches today's emails.\n3.  **Max Results:** Adjust `Max Results` if you typically receive many more than 20 emails in a day that you'd want summarized. (Be mindful of AI token limits for very large inputs).\n\n**Important:** Ensure your Gmail API has the necessary read scope (`https://www.googleapis.com/auth/gmail.readonly` or full access).",
        "position": "right"
      },
      "position": [
        720,
        300
      ],
      "parameters": {
        "query": "after:{{ $json.minDate }} before:{{ $json.nowDate }}",
        "options": {
          "maxResults": 20
        },
        "emailType": "inbox",
        "operation": "getAll"
      },
      "credentials": {
        "gmailApi": {
          "id": "YOUR_GMAIL_CREDENTIAL_ID",
          "resolve": false
        }
      },
      "typeVersion": 2
    },
    {
      "name": "合并邮件内容",
      "type": "n8n-nodes-base.function",
      "notes": {
        "text": "### 4. Combine Email Content\n\nThis `Function` node takes all the fetched emails and combines their sender, subject, and snippet (a short preview) into a single text string.\n\n**Purpose:** This consolidated text string will then be fed into the AI summarization node.\n\n**No configuration needed here**; it's pre-programmed to format your email data.",
        "position": "right"
      },
      "position": [
        960,
        300
      ],
      "parameters": {
        "options": {},
        "function": "let emailContent = \"\";\n\nif (items.length === 0) {\n  emailContent = \"No new emails received today.\";\n} else {\n  emailContent = \"Today's Emails Summary:\\n\\n\";\n  for (const item of items) {\n    const email = item.json;\n    const sender = email.payload.headers.find(h => h.name === 'From').value || 'Unknown Sender';\n    const subject = email.payload.headers.find(h => h.name === 'Subject').value || 'No Subject';\n    const snippet = email.snippet || 'No snippet available.';\n\n    emailContent += `From: ${sender}\\nSubject: ${subject}\\nSnippet: ${snippet}\\n---\\n`;\n  }\n}\n\nreturn [{ json: { combinedEmails: emailContent } }];"
      },
      "typeVersion": 1
    },
    {
      "name": "AI:总结邮件",
      "type": "n8n-nodes-base.openAi",
      "notes": {
        "text": "### 5. AI: Summarize Emails\n\nThis `OpenAI` node takes the combined email content and generates a high-level summary using artificial intelligence.\n\n**Setup:**\n1.  **OpenAI Credential:** Select your existing OpenAI API Key credential.\n2.  **Model:** You can choose `gpt-3.5-turbo` for cost-effectiveness or `gpt-4o` for potentially better and more nuanced summaries.\n3.  **Prompt:** The system prompt instructs the AI on how to summarize the emails, focusing on key topics and action items.\n\n**Output:** The AI-generated summary will be in `{{ $node[\"AI: Summarize Emails\"].json.choices[0].message.content }}`.",
        "position": "right"
      },
      "position": [
        1200,
        300
      ],
      "parameters": {
        "model": "gpt-3.5-turbo",
        "options": {},
        "messages": [
          {
            "role": "system",
            "content": "You are an AI assistant specialized in summarizing daily email communications. Your task is to read the provided email subjects and snippets, identify the most important topics and action items, and create a concise, readable summary. Group related emails if possible. If there are no emails, state that clearly."
          },
          {
            "role": "user",
            "content": "Summarize the following daily email content:\n\n{{ $json.combinedEmails }}"
          }
        ]
      },
      "credentials": {
        "openAiApi": {
          "id": "YOUR_OPENAI_CREDENTIAL_ID",
          "resolve": false
        }
      },
      "typeVersion": 1
    },
    {
      "name": "发送总结邮件",
      "type": "n8n-nodes-base.gmail",
      "notes": {
        "text": "### 6. Send Summary Email\n\nThis `Gmail` node sends the final AI-generated summary to your specified email address.\n\n**Setup:**\n1.  **Gmail Credential:** Select your existing Gmail API credential.\n2.  **From Email:** Enter your Gmail address (this must be the same account you authenticated).\n3.  **To Email:** **IMPORTANT: Change `YOUR_RECIPIENT_EMAIL@example.com` to your actual email address!**\n4.  **Subject:** Includes the current date for easy reference.\n5.  **Text:** The email body contains the summary generated by the AI.\n\nAfter setting up, you can test by clicking 'Execute Workflow' (from the 'Afternoon Trigger' node) to receive an immediate summary of today's emails.",
        "position": "right"
      },
      "position": [
        1440,
        300
      ],
      "parameters": {
        "text": "Hello!\n\nHere's your daily email summary from n8n for today:\n\n{{ $node[\"AI: Summarize Emails\"].json.choices[0].message.content }}\n\n---\n\n*This is an automated summary generated by n8n. Please log into your inbox for full details.*",
        "options": {},
        "subject": "Daily Email Summary: {{ DateTime.now().toFormat('cccc, LLLL dd, yyyy') }}",
        "toEmail": "YOUR_RECIPIENT_EMAIL@example.com",
        "fromEmail": "YOUR_GMAIL_EMAIL@gmail.com"
      },
      "credentials": {
        "gmailApi": {
          "id": "YOUR_GMAIL_CREDENTIAL_ID",
          "resolve": false
        }
      },
      "typeVersion": 2
    }
  ],
  "pinData": {},
  "version": 1,
  "connections": {
    "AI: Summarize Emails": {
      "main": [
        [
          {
            "node": "Send Summary Email",
            "type": "main"
          }
        ]
      ]
    },
    "Combine Email Content": {
      "main": [
        [
          {
            "node": "AI: Summarize Emails",
            "type": "main"
          }
        ]
      ]
    },
    "Calculate Today's Dates": {
      "main": [
        [
          {
            "node": "Get Today's Emails (Gmail)",
            "type": "main"
          }
        ]
      ]
    },
    "Afternoon Trigger (4 PM)": {
      "main": [
        [
          {
            "node": "Calculate Today's Dates",
            "type": "main"
          }
        ]
      ]
    },
    "Get Today's Emails (Gmail)": {
      "main": [
        [
          {
            "node": "Combine Email Content",
            "type": "main"
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

中级 - 个人效率, AI 摘要总结

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
中级
节点数量6
分类2
节点类型4
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

作者
Piotr Sobolewski

Piotr Sobolewski

@piotrsobolewski

AI PhD with 7 years experience as a game dev CEO, currently teaching, helping others and building something new.

外部链接
在 n8n.io 查看

分享此工作流