新闻简报验证与欢迎邮件工作流

高级

这是一个Social Media领域的自动化工作流,包含 24 个节点。主要使用 If、Code、Gmail、Webhook、GoogleSheets 等节点。 包含邮件验证API、Gmail和Google Sheets跟踪的新闻简报注册流程

前置要求
  • Google 账号和 Gmail API 凭证
  • HTTP Webhook 端点(n8n 会自动生成)
  • Google Sheets API 凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "",
  "meta": {
    "instanceId": "",
    "templateCredsSetupCompleted": false
  },
  "name": "新闻简报验证与欢迎邮件工作流",
  "tags": [],
  "nodes": [
    {
      "id": "a949eca7-950b-4d16-9015-50844e411833",
      "name": "Webhook - 新闻简报注册",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -944,
        336
      ],
      "webhookId": "",
      "parameters": {
        "path": "newsletter-signup",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "lastNode"
      },
      "typeVersion": 1
    },
    {
      "id": "f05fbb8b-b55a-4386-99a3-e603b344a445",
      "name": "便签 - Webhook 信息",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        96
      ],
      "parameters": {
        "width": 320,
        "height": 392,
        "content": "## 🎯 工作流开始"
      },
      "typeVersion": 1
    },
    {
      "id": "1a7ac1eb-2a43-4ace-86e7-1c88c1e97ac5",
      "name": "检查数据完整性",
      "type": "n8n-nodes-base.if",
      "position": [
        -608,
        336
      ],
      "parameters": {
        "conditions": {
          "number": [],
          "string": [
            {
              "value1": "={{ $json.body.email }}",
              "operation": "isNotEmpty"
            },
            {
              "value1": "={{ $json.body.name }}",
              "operation": "isNotEmpty"
            }
          ],
          "boolean": []
        }
      },
      "typeVersion": 1
    },
    {
      "id": "be02be23-fbf5-4d2c-a5f5-52d0c88511b3",
      "name": "便签 - 数据验证",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -688,
        96
      ],
      "parameters": {
        "color": 4,
        "width": 300,
        "height": 384,
        "content": "## ✅ 数据验证"
      },
      "typeVersion": 1
    },
    {
      "id": "97593e4d-ee1b-452e-8e15-e6aad3ff8c90",
      "name": "记录不完整提交",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -416,
        544
      ],
      "parameters": {
        "columns": {
          "value": {
            "name": "={{ $json.body.name || 'N/A' }}",
            "email": "={{ $json.body.email || 'N/A' }}",
            "reason": "Incomplete data",
            "timestamp": "={{ $now.toISO() }}"
          },
          "schema": [
            {
              "id": "timestamp",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "reason",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "reason",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEETS_SHEET_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit#gid/YOUR_GOOGLE_SHEETS_SHEET_ID",
          "cachedResultName": "Invalid_Submissions"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEETS_DOCUMENT_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit?usp=drivesdk",
          "cachedResultName": "Newsletter_Tracking"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "YOUR_GOOGLE_SHEETS_OAUTH2_API_KEY",
          "name": "Google Sheets OAuth2"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "5804f33e-ef20-4aa9-89ad-0f12f207f08e",
      "name": "便签 - 记录无效",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -464,
        528
      ],
      "parameters": {
        "color": 7,
        "width": 280,
        "height": 396,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "6404d655-cebb-4bbb-8f4b-cc875b431c3a",
      "name": "便签 - 邮箱验证",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -368,
        -96
      ],
      "parameters": {
        "color": 2,
        "width": 300,
        "height": 468,
        "content": "## 🔍 邮箱验证"
      },
      "typeVersion": 1
    },
    {
      "id": "e6ced67a-7615-4cf6-8cbf-d6a299116046",
      "name": "检查邮箱有效性",
      "type": "n8n-nodes-base.if",
      "position": [
        16,
        224
      ],
      "parameters": {
        "conditions": {
          "boolean": [
            {
              "value1": "={{ $json.valid }}",
              "value2": "={{ true }}"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0c120ee2-e65e-4971-86dc-3dc8955eb188",
      "name": "便签 - 条件逻辑",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -32
      ],
      "parameters": {
        "color": 3,
        "width": 280,
        "height": 396,
        "content": "## ⚡条件路由"
      },
      "typeVersion": 1
    },
    {
      "id": "6f87b084-7f15-496c-b992-8685d1fde0bb",
      "name": "生成欢迎邮件 HTML",
      "type": "n8n-nodes-base.code",
      "position": [
        368,
        80
      ],
      "parameters": {
        "jsCode": "// Generate Welcome Email HTML - Direct Webhook Reference\n// This gets data directly from the webhook node, bypassing any data loss issues\n\nconst items = $input.all();\nconst outputItems = [];\n\nfor (const item of items) {\n  // Get data DIRECTLY from the webhook node (first node in workflow)\n  const webhookData = $('Webhook - Newsletter Signup').first().json.body;\n  \n  // Extract user details\n  const name = webhookData.name;\n  const email = webhookData.email;\n  const source = webhookData.source || 'website';\n  \n  // Get first name for personalization\n  const firstName = name.split(' ')[0];\n  \n  // Build the HTML email\n  const htmlContent = `\n<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <style>\n    body { \n      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif;\n      line-height: 1.6; \n      color: #333; \n      margin: 0; \n      padding: 0;\n      background-color: #f4f4f4;\n    }\n    .container { \n      max-width: 600px; \n      margin: 20px auto; \n      background: #ffffff;\n      border-radius: 12px;\n      overflow: hidden;\n      box-shadow: 0 4px 6px rgba(0,0,0,0.1);\n    }\n    .header { \n      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); \n      color: white; \n      padding: 40px 30px;\n      text-align: center;\n    }\n    .header h1 {\n      margin: 0;\n      font-size: 28px;\n      font-weight: 600;\n    }\n    .content { \n      padding: 40px 30px;\n      background: #ffffff;\n    }\n    .content h2 {\n      color: #333;\n      font-size: 24px;\n      margin-top: 0;\n      margin-bottom: 20px;\n    }\n    .content p {\n      margin: 15px 0;\n      color: #555;\n    }\n    ul { \n      padding-left: 0;\n      list-style: none;\n    }\n    li { \n      margin: 12px 0;\n      padding-left: 30px;\n      position: relative;\n      color: #555;\n    }\n    li:before {\n      content: \"✓\";\n      position: absolute;\n      left: 0;\n      color: #667eea;\n      font-weight: bold;\n      font-size: 18px;\n    }\n    .button-container {\n      text-align: center;\n      margin: 30px 0;\n    }\n    .button { \n      display: inline-block; \n      padding: 14px 35px; \n      background: #667eea; \n      color: white !important; \n      text-decoration: none; \n      border-radius: 6px;\n      font-weight: 600;\n      font-size: 16px;\n      transition: background 0.3s ease;\n    }\n    .button:hover {\n      background: #5568d3;\n    }\n    .divider {\n      height: 1px;\n      background: #e0e0e0;\n      margin: 30px 0;\n    }\n    .footer { \n      text-align: center; \n      padding: 30px; \n      color: #999; \n      font-size: 13px;\n      background: #f9f9f9;\n      border-top: 1px solid #e0e0e0;\n    }\n    .footer a {\n      color: #667eea;\n      text-decoration: none;\n    }\n    .footer a:hover {\n      text-decoration: underline;\n    }\n    @media only screen and (max-width: 600px) {\n      .container {\n        margin: 10px;\n        border-radius: 8px;\n      }\n      .header {\n        padding: 30px 20px;\n      }\n      .header h1 {\n        font-size: 24px;\n      }\n      .content {\n        padding: 30px 20px;\n      }\n      .content h2 {\n        font-size: 20px;\n      }\n    }\n  </style>\n</head>\n<body>\n  <div class=\"container\">\n    <div class=\"header\">\n      <h1>🎉 Welcome to Our Newsletter!</h1>\n    </div>\n    \n    <div class=\"content\">\n      <h2>Hi ${firstName}! 👋</h2>\n      \n      <p>Thank you for joining our newsletter community! We're absolutely thrilled to have you on board.</p>\n      \n      <p><strong>Here's what you can expect from us:</strong></p>\n      <ul>\n        <li><strong>Weekly Insights:</strong> Valuable tips and industry updates delivered to your inbox</li>\n        <li><strong>Exclusive Offers:</strong> Early access to special deals and promotions</li>\n        <li><strong>Free Resources:</strong> Helpful guides, templates, and tools</li>\n        <li><strong>Community Access:</strong> Connect with like-minded individuals</li>\n      </ul>\n      \n      <div class=\"button-container\">\n        <a href=\"https://yourwebsite.com/confirm?email=${encodeURIComponent(email)}&source=${encodeURIComponent(source)}\" class=\"button\">\n          Confirm Your Subscription\n        </a>\n      </div>\n      \n      <div class=\"divider\"></div>\n      \n      <p>Have questions or feedback? Simply hit reply to this email – we read and respond to every message!</p>\n      \n      <p style=\"margin-top: 30px;\">\n        Best regards,<br>\n        <strong>The Team</strong>\n      </p>\n    </div>\n    \n    <div class=\"footer\">\n      <p>You're receiving this because you subscribed at <strong>yourwebsite.com</strong></p>\n      <p>\n        <a href=\"https://yourwebsite.com/preferences?email=${encodeURIComponent(email)}\">Update Preferences</a> | \n        <a href=\"https://yourwebsite.com/unsubscribe?email=${encodeURIComponent(email)}\">Unsubscribe</a>\n      </p>\n      <p style=\"margin-top: 20px; color: #bbb; font-size: 11px;\">\n        © ${new Date().getFullYear()} Your Company Name. All rights reserved.\n      </p>\n    </div>\n  </div>\n</body>\n</html>\n  `;\n  \n  // Return formatted output\n  outputItems.push({\n    json: {\n      // Original webhook data\n      name: name,\n      email: email,\n      source: source,\n      \n      // Email content\n      htmlEmail: htmlContent,\n      subject: `🎉 Welcome to Our Newsletter, ${firstName}!`,\n      \n      // Additional metadata\n      firstName: firstName,\n      generatedAt: new Date().toISOString()\n    }\n  });\n}\n\nreturn outputItems;"
      },
      "typeVersion": 2
    },
    {
      "id": "744d258d-a4ee-495e-96e1-661f13641b2f",
      "name": "便签 - HTML 生成",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        272,
        -192
      ],
      "parameters": {
        "color": 5,
        "width": 300,
        "height": 432,
        "content": "## 📧 邮件生成"
      },
      "typeVersion": 1
    },
    {
      "id": "dec5e4b1-6105-447f-996a-4c9f5504987b",
      "name": "发送欢迎邮件",
      "type": "n8n-nodes-base.gmail",
      "position": [
        704,
        80
      ],
      "webhookId": "",
      "parameters": {
        "sendTo": "={{ $json.email }}",
        "message": "={{ $json.htmlEmail }}",
        "options": {
          "senderName": "Your Brand Team"
        },
        "subject": "={{ $json.subject }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "YOUR_GMAIL_OAUTH2_API_KEY",
          "name": "Gmail OAuth2"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "524fa2bb-2948-4099-9d2f-9f54f8ae34e3",
      "name": "便签 - 发送邮件",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        608,
        -112
      ],
      "parameters": {
        "color": 6,
        "width": 280,
        "height": 348,
        "content": "## ✉️ 发送邮件"
      },
      "typeVersion": 1
    },
    {
      "id": "2be68c46-ea97-4c34-bd80-4731e09f0733",
      "name": "准备无效邮箱消息",
      "type": "n8n-nodes-base.code",
      "position": [
        368,
        464
      ],
      "parameters": {
        "jsCode": "// Prepare Invalid Email Data - Code Node\n// This handles the Verifi Email API response format\n\nconst items = $input.all();\n\nreturn items.map(item => {\n  // Extract the first item from the array (Verifi returns an array)\n  const emailData = Array.isArray(item.json) ? item.json[0] : item.json;\n  \n  // Determine the specific reason for invalidity\n  let invalidReason = '';\n  let technicalReason = '';\n  \n  if (!emailData.details.validMxRecord) {\n    invalidReason = 'Invalid or non-existent email domain';\n    technicalReason = 'No valid MX records found for the domain';\n  } else if (!emailData.details.rfcCompliant) {\n    invalidReason = 'Email format is not compliant with standards';\n    technicalReason = 'RFC non-compliant email format';\n  } else if (emailData.details.disposable) {\n    invalidReason = 'Disposable/temporary email address detected';\n    technicalReason = 'Disposable email service';\n  } else if (!emailData.details.spoofFree) {\n    invalidReason = 'Potential spoofed or suspicious email';\n    technicalReason = 'Email may be spoofed';\n  } else {\n    invalidReason = 'Email verification failed';\n    technicalReason = 'Unknown verification issue';\n  }\n  \n  // Get original subscriber data (name, email, source)\n  // This assumes the original data is still in the item\n  const originalData = item.json.name ? item.json : \n                       (item.json[0] && item.json[0].name ? item.json[0] : {});\n  \n  return {\n    json: {\n      // Original subscriber information\n      name: originalData.name || 'Subscriber',\n      email: emailData.email,\n      source: originalData.source || 'Unknown',\n      \n      // Verification results\n      valid: false,\n      validMxRecord: emailData.details.validMxRecord,\n      rfcCompliant: emailData.details.rfcCompliant,\n      disposable: emailData.details.disposable,\n      spoofFree: emailData.details.spoofFree,\n      \n      // Domain information\n      domain: emailData.email.split('@')[1] || 'N/A',\n      mxProvider: emailData.details.mx.provider || 'N/A',\n      mxRecords: emailData.details.mx.records.join(', ') || 'None',\n      \n      // Reason messages\n      invalidReason: invalidReason,\n      technicalReason: technicalReason,\n      // Timestamp\n      timestamp: new Date().toISOString()\n    }\n  };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "1d73e003-a440-45a2-98a4-702d13c01cee",
      "name": "便签 - 无效处理器",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        288,
        448
      ],
      "parameters": {
        "color": 2,
        "width": 252,
        "height": 416,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "f46e0115-189d-4610-9b6b-87341d2da9cc",
      "name": "记录无效邮箱",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        720,
        464
      ],
      "parameters": {
        "columns": {
          "value": {
            "name": "={{ $json.name }}",
            "email": "={{ $json.email }}",
            "domain": "={{ $json.domain }}",
            "reason": "={{ $json.invalidReason }}",
            "timestamp": "={{ $json.timestamp }}",
            "technical_reason": "={{ $json.technicalReason }}"
          },
          "schema": [
            {
              "id": "timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "reason",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "reason",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "technical_reason",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "technical_reason",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "domain",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "domain",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEETS_SHEET_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit#gid/YOUR_GOOGLE_SHEETS_SHEET_ID",
          "cachedResultName": "Invalid_Emails"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEETS_DOCUMENT_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit?usp=drivesdk",
          "cachedResultName": "Newsletter_Tracking"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "YOUR_GOOGLE_SHEETS_OAUTH2_API_KEY",
          "name": "Google Sheets OAuth2"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "498591a2-335e-4f0b-b483-6fccec485c24",
      "name": "便签 - 记录无效邮箱",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        608,
        432
      ],
      "parameters": {
        "color": 3,
        "width": 312,
        "height": 444,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "895f6d8e-9384-4282-a0dd-ad75426f5ea5",
      "name": "格式化主日志条目",
      "type": "n8n-nodes-base.code",
      "position": [
        1088,
        464
      ],
      "parameters": {
        "jsCode": "return $input.all().map(item => {\n  // Check if this is from the valid path or invalid path\n  const isValid = item.json.valid === true;\n  \n  return {\n    json: {\n      timestamp: item.json.timestamp || new Date().toISOString(),\n      name: item.json.name,\n      email: item.json.email,\n      verification_result: isValid ? 'Valid' : 'Invalid',\n      verification_score: 'N/A', // Verifi API doesn't provide score\n      email_sent: isValid ? 'Yes' : 'No',\n      source: item.json.source || 'Unknown',\n      disposable: item.json.disposable || false,\n      domain: item.json.domain || 'N/A',\n      valid_mx_record: item.json.validMxRecord !== undefined ? item.json.validMxRecord : 'N/A',\n      rfc_compliant: item.json.rfcCompliant !== undefined ? item.json.rfcCompliant : 'N/A',\n      invalid_reason: item.json.invalidReason || 'N/A'\n    }\n  };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "e1879abf-698d-44c9-ba00-5de202926f72",
      "name": "便签 - 格式化",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1008,
        448
      ],
      "parameters": {
        "color": 4,
        "width": 260,
        "height": 424,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "cbf72a80-50ae-4fd4-9149-5cc3599bceb6",
      "name": "记录到主表格",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1424,
        464
      ],
      "parameters": {
        "columns": {
          "value": {
            "name": "={{ $json.name }}",
            "email": "={{ $json.email }}",
            "domain": "={{ $json.domain }}",
            "source": "={{ $json.source }}",
            "timestamp": "={{ $json.timestamp }}",
            "disposable": "={{ $json.disposable }}",
            "email_sent": "={{ $json.email_sent }}",
            "verification_score": "={{ $json.verification_score }}",
            "verification_result": "={{ $json.verification_result }}"
          },
          "schema": [
            {
              "id": "timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "verification_result",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "verification_result",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "verification_score",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "verification_score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email_sent",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "email_sent",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "source",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "source",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "disposable",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "disposable",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "domain",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "domain",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEETS_SHEET_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit#gid/YOUR_GOOGLE_SHEETS_SHEET_ID",
          "cachedResultName": "Master_Log"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEETS_DOCUMENT_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_DOCUMENT_ID/edit?usp=drivesdk",
          "cachedResultName": "Newsletter_Tracking"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "YOUR_GOOGLE_SHEETS_OAUTH2_API_KEY",
          "name": "Google Sheets OAuth2"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "9a2aff71-9890-4acb-9339-a4ed98728239",
      "name": "便签 - 主日志",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1328,
        448
      ],
      "parameters": {
        "color": 5,
        "width": 312,
        "height": 444,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "492eb16c-3ac4-4b07-8309-44e6e4b317c7",
      "name": "便签 - 凭据设置",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1440,
        16
      ],
      "parameters": {
        "color": 4,
        "width": 380,
        "height": 472,
        "content": "## 🔐 需要设置凭据"
      },
      "typeVersion": 1
    },
    {
      "id": "a39a0a10-82f7-4f37-bbb0-bee8855cc3ee",
      "name": "便签 - 工作流摘要",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1408,
        -384
      ],
      "parameters": {
        "color": 5,
        "width": 340,
        "height": 376,
        "content": "## 📋 工作流摘要"
      },
      "typeVersion": 1
    },
    {
      "id": "35ae866d-4f51-4751-8703-6a018c72fb2b",
      "name": "Verifi Email",
      "type": "n8n-nodes-verifiemail.verifiEmail",
      "position": [
        -288,
        224
      ],
      "parameters": {
        "email": "={{ $json.body.email }}"
      },
      "credentials": {
        "verifiEmailApi": {
          "id": "YOUR_VERIFI_EMAIL_API_KEY",
          "name": "VerifiEmail API"
        }
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "",
  "connections": {
    "Verifi Email": {
      "main": [
        [
          {
            "node": "Check Email Validity",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log Invalid Emails": {
      "main": [
        [
          {
            "node": "Format Master Log Entry",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Welcome Email": {
      "main": [
        []
      ]
    },
    "Check Email Validity": {
      "main": [
        [
          {
            "node": "Generate Welcome Email HTML",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Prepare Invalid Email Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Data Completeness": {
      "main": [
        [
          {
            "node": "Verifi Email",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Log Incomplete Submissions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Master Log Entry": {
      "main": [
        [
          {
            "node": "Log to Master Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Welcome Email HTML": {
      "main": [
        [
          {
            "node": "Send Welcome Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook - Newsletter Signup": {
      "main": [
        [
          {
            "node": "Check Data Completeness",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Invalid Email Message": {
      "main": [
        [
          {
            "node": "Log Invalid Emails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

这是一个高级难度的工作流,适用于Social Media等场景。适合高级用户,包含 16+ 个节点的复杂工作流

需要付费吗?

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

工作流信息
难度等级
高级
节点数量24
分类1
节点类型7
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
Jitesh Dugar

Jitesh Dugar

@jiteshdugar

AI Automation Specialist - OpenAI, CRM & Automation Expert with a solid understanding of various tools that include Zapier, Make, Zoho CRM, Hubspot, Google Sheets, Airtable, Pipedrive, Google Analytics, and more.

外部链接
在 n8n.io 上查看 →

分享此工作流