邮件列表卫生自动化
高级
这是一个Content Creation, Multimodal AI领域的自动化工作流,包含 20 个节点。主要使用 If, Code, Gmail, Merge, GoogleSheets 等节点。 每周使用Google表格、VerifiEmail和Gmail报告验证邮件列表
前置要求
- •Google 账号和 Gmail API 凭证
- •Google Sheets API 凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "ZquoLLFP4qaudR5P",
"meta": {
"instanceId": "",
"templateCredsSetupCompleted": true
},
"name": "邮件列表卫生自动化",
"tags": [],
"nodes": [
{
"id": "8a19fa06-c280-4907-a551-3b34ca0f993c",
"name": "计算统计信息",
"type": "n8n-nodes-base.code",
"position": [
656,
-320
],
"parameters": {
"jsCode": "// Get all processed items from the loop\nconst items = $input.all();\n\n// Log for debugging\nconsole.log(`Processing ${items.length} items for statistics`);\n\n// Initialize counters\nconst stats = {\n total: items.length,\n valid: 0,\n invalid: 0,\n risky: 0,\n unknown: 0,\n processed_at: new Date().toLocaleString('en-IN', {\n dateStyle: 'full',\n timeStyle: 'short'\n }),\n sheet_url: $('Read Email List').params?.documentId?.__rl?.cachedResultUrl || 'YOUR_GOOGLE_SHEET_URL'\n};\n\n// Count each category\nitems.forEach(item => {\n const status = item.json.status;\n \n if (status === 'valid') {\n stats.valid++;\n } else if (status === 'invalid') {\n stats.invalid++;\n } else if (status === 'risky') {\n stats.risky++;\n } else {\n stats.unknown++;\n }\n});\n\n// Calculate percentages (handle division by zero)\nif (stats.total > 0) {\n stats.valid_percentage = ((stats.valid / stats.total) * 100).toFixed(1);\n stats.invalid_percentage = ((stats.invalid / stats.total) * 100).toFixed(1);\n stats.risky_percentage = ((stats.risky / stats.total) * 100).toFixed(1);\n stats.unknown_percentage = ((stats.unknown / stats.total) * 100).toFixed(1);\n} else {\n stats.valid_percentage = '0.0';\n stats.invalid_percentage = '0.0';\n stats.risky_percentage = '0.0';\n stats.unknown_percentage = '0.0';\n}\n\n// Calculate list health score (0-100)\n// Formula: \n// - Valid emails: +100 points per email (percentage of total)\n// - Invalid emails: -20 points per email (penalty)\n// - Risky emails: -10 points per email (smaller penalty)\nstats.health_score = Math.max(0, Math.min(100, Math.round(\n (stats.valid / stats.total) * 100 - \n (stats.invalid / stats.total) * 20 - \n (stats.risky / stats.total) * 10\n)));\n\n// Determine health status\nif (stats.health_score >= 80) {\n stats.health_status = 'Excellent ✅';\n stats.health_color = '#4CAF50';\n} else if (stats.health_score >= 60) {\n stats.health_status = 'Good ⚠️';\n stats.health_color = '#ff9800';\n} else {\n stats.health_status = 'Needs Attention ❌';\n stats.health_color = '#f44336';\n}\n\n// Create summary text for notifications\nstats.summary = `📊 Email List Validation Complete\n\n✅ Valid: ${stats.valid} (${stats.valid_percentage}%)\n❌ Invalid: ${stats.invalid} (${stats.invalid_percentage}%)\n⚠️ Risky: ${stats.risky} (${stats.risky_percentage}%)\n❓ Unknown: ${stats.unknown} (${stats.unknown_percentage}%)\n\n📈 List Health Score: ${stats.health_score}/100 - ${stats.health_status}\n📧 Total Processed: ${stats.total} emails\n🕐 Completed: ${stats.processed_at}`;\n\n// Create detailed lists for the report\nstats.email_details = {\n valid_emails: items\n .filter(item => item.json.status === 'valid')\n .map(item => item.json.email),\n \n invalid_emails: items\n .filter(item => item.json.status === 'invalid')\n .map(item => ({\n email: item.json.email,\n reason: item.json.notes\n })),\n \n risky_emails: items\n .filter(item => item.json.status === 'risky')\n .map(item => ({\n email: item.json.email,\n reason: item.json.notes\n }))\n};\n\n// Log summary for debugging\nconsole.log(stats.summary);\n\n// Return the complete statistics object\nreturn stats;"
},
"typeVersion": 2
},
{
"id": "d6827158-4e8d-4806-a04b-7f9f35384532",
"name": "每周计划(周五下午 5 点)",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
0,
0
],
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 17 * * 5"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "0084d5ab-cdf7-4f5e-969e-711eee3bbcd7",
"name": "读取邮件列表",
"type": "n8n-nodes-base.googleSheets",
"position": [
208,
0
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1HjIuSDqm2e8k0TUZuFqOdm4MZ4vzvnLtKRSFsiKVtYk/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "{{$credentials.googleSheetsOAuth2Api}}",
"name": "Google Sheets Account"
}
},
"typeVersion": 4.7
},
{
"id": "6d5bacd8-88cc-4979-a445-eba35f7b60f6",
"name": "处理每封邮件",
"type": "n8n-nodes-base.splitInBatches",
"position": [
416,
0
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "e2bf73b2-46f6-4661-8c74-5297b37318ad",
"name": "验证邮件地址",
"type": "n8n-nodes-verifiemail.verifiEmail",
"position": [
672,
-96
],
"parameters": {
"email": "={{ $json.email }}"
},
"credentials": {
"verifiEmailApi": {
"id": "{{$credentials.verifiEmailApi}}",
"name": "VerifiEmail Account"
}
},
"typeVersion": 1
},
{
"id": "63fdab5f-ce90-4700-a343-f5823f17a236",
"name": "检查验证结果",
"type": "n8n-nodes-base.if",
"position": [
896,
-96
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "a3f7a8d6-9219-44b7-be4b-0f8d5d5aa5c5",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.valid }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "e71190c0-fdc1-49ac-ae76-742dbea0782d",
"name": "处理有效邮件",
"type": "n8n-nodes-base.code",
"position": [
1248,
-240
],
"parameters": {
"jsCode": "// Get the validation result from current input\nconst validation = $input.first().json;\n\n// Get the ORIGINAL data from Loop Over Items node\nconst loopData = $('Process Each Email').item.json;\n\n// Process valid email\nlet status = 'valid';\nlet notes = 'Email verified successfully';\n\n// Check for any warnings even if valid\nif (validation.details?.disposable === true) {\n status = 'risky';\n notes = 'Valid but disposable email address';\n}\n\nconst checkedAt = new Date().toLocaleString('en-IN', { \n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n hour12: true\n});\n\n// Return merged data - combining Loop data + validation results\nreturn {\n row_number: loopData.row_number,\n name: loopData.name,\n email: loopData.email,\n status: status,\n checked_at: checkedAt,\n notes: notes,\n is_valid: true\n};"
},
"typeVersion": 2
},
{
"id": "08f26195-97eb-4cf0-989e-2b686c7e4bd7",
"name": "处理无效邮件",
"type": "n8n-nodes-base.code",
"position": [
1232,
-48
],
"parameters": {
"jsCode": "// Get the validation result\nconst validation = $input.first().json;\n\n// Get original data from Loop Over Items\nconst loopData = $('Process Each Email').item.json;\n\n// Process invalid email\nlet status = 'invalid';\nlet notes = 'Email validation failed';\n\n// Get more specific reason from validation details\nif (validation.details) {\n if (validation.details.validMxRecord === false) {\n notes = 'Invalid - No mail server found';\n } else if (validation.details.rfcCompliant === false) {\n notes = 'Invalid - Incorrect email format';\n } else if (validation.details.spoofFree === false) {\n notes = 'Invalid - Possible spoof/fake email';\n }\n}\n\nconst checkedAt = new Date().toLocaleString('en-IN', { \n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n hour12: true\n});\n\n// Return merged data\nreturn {\n row_number: loopData.row_number,\n name: loopData.name,\n email: loopData.email,\n status: status,\n checked_at: checkedAt,\n notes: notes,\n is_valid: false\n};"
},
"typeVersion": 2
},
{
"id": "5e98a36d-31c7-446b-a1ed-9988d3cb3ef3",
"name": "更新有效状态",
"type": "n8n-nodes-base.googleSheets",
"position": [
1520,
-240
],
"parameters": {
"columns": {
"value": {
"name": "={{ $json.name }}",
"email": "={{ $json.email }}",
"notes": "={{ $json.notes }}",
"status": "={{ $json.status }}",
"checked_at": "={{ $json.checked_at }}",
"row_number": "={{ $json.row_number }}"
},
"schema": [
{
"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": "status",
"type": "string",
"display": true,
"required": false,
"displayName": "status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "checked_at",
"type": "string",
"display": true,
"required": false,
"displayName": "checked_at",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "notes",
"type": "string",
"display": true,
"required": false,
"displayName": "notes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1HjIuSDqm2e8k0TUZuFqOdm4MZ4vzvnLtKRSFsiKVtYk/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "aFQXpCszpua9MQeO",
"name": "Google Sheets account - Akshita"
}
},
"typeVersion": 4.7
},
{
"id": "790a9728-2083-402d-8334-8254924c2e29",
"name": "更新无效状态",
"type": "n8n-nodes-base.googleSheets",
"position": [
1520,
-48
],
"parameters": {
"columns": {
"value": {
"name": "={{ $json.name }}",
"email": "={{ $json.email }}",
"notes": "={{ $json.notes }}",
"status": "={{ $json.status }}",
"checked_at": "={{ $json.checked_at }}",
"row_number": "={{ $json.row_number }}"
},
"schema": [
{
"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": "status",
"type": "string",
"display": true,
"required": false,
"displayName": "status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "checked_at",
"type": "string",
"display": true,
"required": false,
"displayName": "checked_at",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "notes",
"type": "string",
"display": true,
"required": false,
"displayName": "notes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1HjIuSDqm2e8k0TUZuFqOdm4MZ4vzvnLtKRSFsiKVtYk/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "aFQXpCszpua9MQeO",
"name": "Google Sheets account - Akshita"
}
},
"typeVersion": 4.7
},
{
"id": "11a7ea29-2e24-4f9c-91dc-27afa0ca46f7",
"name": "发送每周报告",
"type": "n8n-nodes-base.gmail",
"position": [
928,
-320
],
"webhookId": "",
"parameters": {
"sendTo": "marketing.manager@company.com",
"message": "=<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"UTF-8\">\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: #f5f5f5;\n }\n .container { \n max-width: 650px; \n margin: 20px auto; \n background: white;\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 0 10px 0;\n font-size: 28px;\n font-weight: 600;\n }\n .header p {\n margin: 0;\n opacity: 0.9;\n font-size: 16px;\n }\n .content { \n padding: 30px;\n }\n .health-score {\n background: {{ $json.health_color }};\n color: white;\n padding: 30px;\n border-radius: 12px;\n text-align: center;\n margin: 0 0 30px 0;\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n }\n .health-score-label {\n font-size: 14px;\n text-transform: uppercase;\n letter-spacing: 1px;\n opacity: 0.9;\n margin-bottom: 10px;\n }\n .health-score-number {\n font-size: 56px;\n font-weight: bold;\n margin: 15px 0;\n line-height: 1;\n }\n .health-score-status {\n font-size: 18px;\n font-weight: 500;\n opacity: 0.95;\n }\n .stats-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 15px;\n margin: 30px 0;\n }\n .stat-card {\n background: #f8f9fa;\n padding: 20px;\n border-radius: 10px;\n text-align: center;\n border: 2px solid #e9ecef;\n transition: transform 0.2s;\n }\n .stat-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0,0,0,0.1);\n }\n .stat-label {\n color: #6c757d;\n font-size: 13px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 8px;\n font-weight: 600;\n }\n .stat-number {\n font-size: 32px;\n font-weight: bold;\n margin: 8px 0;\n line-height: 1;\n }\n .stat-percentage {\n color: #6c757d;\n font-size: 14px;\n }\n .valid { color: #28a745; }\n .invalid { color: #dc3545; }\n .risky { color: #fd7e14; }\n .action-section {\n background: #fff3cd;\n border-left: 4px solid #ffc107;\n padding: 20px;\n margin: 25px 0;\n border-radius: 8px;\n }\n .action-section h3 {\n margin: 0 0 15px 0;\n color: #856404;\n font-size: 18px;\n }\n .action-section ul {\n margin: 10px 0;\n padding-left: 20px;\n }\n .action-section li {\n margin: 8px 0;\n color: #856404;\n }\n .btn {\n display: inline-block;\n background: #667eea;\n color: white !important;\n padding: 14px 32px;\n text-decoration: none;\n border-radius: 8px;\n margin: 20px 0;\n font-weight: 600;\n font-size: 16px;\n box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);\n transition: all 0.3s;\n }\n .btn:hover {\n background: #5568d3;\n transform: translateY(-2px);\n box-shadow: 0 6px 16px rgba(102, 126, 234, 0.5);\n }\n .summary-box {\n background: white;\n padding: 20px;\n border-radius: 10px;\n margin: 20px 0;\n border: 2px solid #e9ecef;\n }\n .summary-box h3 {\n margin: 0 0 15px 0;\n font-size: 18px;\n color: #495057;\n }\n .summary-box pre {\n white-space: pre-wrap;\n font-family: 'SF Mono', 'Monaco', 'Courier New', monospace;\n font-size: 14px;\n line-height: 1.8;\n margin: 0;\n color: #495057;\n }\n .insights-box {\n background: linear-gradient(135deg, #e3f2fd 0%, #f3e5f5 100%);\n padding: 25px;\n border-radius: 10px;\n margin: 25px 0;\n }\n .insights-box h3 {\n margin: 0 0 15px 0;\n color: #1976d2;\n font-size: 18px;\n }\n .insight-item {\n margin: 12px 0;\n padding-left: 25px;\n position: relative;\n }\n .insight-item:before {\n content: '✓';\n position: absolute;\n left: 0;\n color: #1976d2;\n font-weight: bold;\n font-size: 18px;\n }\n .email-list {\n background: #f8f9fa;\n padding: 15px;\n border-radius: 8px;\n margin: 15px 0;\n max-height: 200px;\n overflow-y: auto;\n }\n .email-list h4 {\n margin: 0 0 10px 0;\n font-size: 14px;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n .email-item {\n padding: 8px 12px;\n margin: 5px 0;\n background: white;\n border-radius: 6px;\n font-size: 13px;\n border-left: 3px solid #dee2e6;\n }\n .email-item.invalid {\n border-left-color: #dc3545;\n }\n .email-reason {\n color: #6c757d;\n font-size: 12px;\n margin-top: 4px;\n }\n .footer {\n background: #f8f9fa;\n text-align: center;\n color: #6c757d;\n font-size: 13px;\n padding: 25px;\n border-top: 1px solid #dee2e6;\n }\n .footer p {\n margin: 5px 0;\n }\n @media only screen and (max-width: 600px) {\n .stats-grid {\n grid-template-columns: 1fr;\n }\n .container {\n margin: 10px;\n }\n .content {\n padding: 20px;\n }\n }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"header\">\n <h1>🧹 Email List Hygiene Report</h1>\n <p>Automated Weekly Validation Results</p>\n </div>\n \n <div class=\"content\">\n <!-- Health Score Section -->\n <div class=\"health-score\">\n <div class=\"health-score-label\">List Health Score</div>\n <div class=\"health-score-number\">{{ $json.health_score }}/100</div>\n <div class=\"health-score-status\">{{ $json.health_status }}</div>\n </div>\n\n <!-- Statistics Grid -->\n <div class=\"stats-grid\">\n <div class=\"stat-card\">\n <div class=\"stat-label\">Valid Emails</div>\n <div class=\"stat-number valid\">{{ $json.valid }}</div>\n <div class=\"stat-percentage\">{{ $json.valid_percentage }}%</div>\n </div>\n \n <div class=\"stat-card\">\n <div class=\"stat-label\">Invalid Emails</div>\n <div class=\"stat-number invalid\">{{ $json.invalid }}</div>\n <div class=\"stat-percentage\">{{ $json.invalid_percentage }}%</div>\n </div>\n \n <div class=\"stat-card\">\n <div class=\"stat-label\">Risky Emails</div>\n <div class=\"stat-number risky\">{{ $json.risky }}</div>\n <div class=\"stat-percentage\">{{ $json.risky_percentage }}%</div>\n </div>\n \n <div class=\"stat-card\">\n <div class=\"stat-label\">Total Processed</div>\n <div class=\"stat-number\">{{ $json.total }}</div>\n <div class=\"stat-percentage\">100%</div>\n </div>\n </div>\n\n <!-- Action Required Section -->\n <div class=\"action-section\">\n <h3>⚡ Action Required</h3>\n <ul>\n <li><strong>{{ $json.invalid }}</strong> invalid email(s) detected and flagged</li>\n <li><strong>{{ $json.risky }}</strong> risky email(s) found (disposable/catch-all)</li>\n <li>All email statuses have been automatically updated in your sheet</li>\n <li>Review flagged emails and consider removal from active campaigns</li>\n </ul>\n </div>\n\n <!-- Invalid Emails List -->\n {{ $json.invalid > 0 ? '<div class=\"email-list\"><h4>❌ Invalid Emails Detected</h4>' : '' }}\n {{ $json.email_details.invalid_emails.map(e => `<div class=\"email-item invalid\"><strong>${e.email}</strong><div class=\"email-reason\">${e.reason}</div></div>`).join('') }}\n {{ $json.invalid > 0 ? '</div>' : '' }}\n\n <!-- CTA Button -->\n <div style=\"text-align: center;\">\n <a href=\"{{ $json.sheet_url }}\" class=\"btn\">📊 View Full Report in Google Sheets</a>\n </div>\n\n <!-- Text Summary -->\n <div class=\"summary-box\">\n <h3>📋 Quick Summary</h3>\n <pre>{{ $json.summary }}</pre>\n </div>\n\n <!-- Insights Section -->\n <div class=\"insights-box\">\n <h3>💡 What This Means for Your Campaigns</h3>\n <div class=\"insight-item\">\n <strong>Improved Deliverability:</strong> Valid emails ensure better inbox placement and sender reputation\n </div>\n <div class=\"insight-item\">\n <strong>Cost Savings:</strong> Reduced bounces mean lower email service costs and fewer blacklist risks\n </div>\n <div class=\"insight-item\">\n <strong>Better Metrics:</strong> Clean lists lead to higher open rates, click rates, and engagement\n </div>\n <div class=\"insight-item\">\n <strong>Compliance Ready:</strong> Maintain GDPR/CAN-SPAM compliance with verified contacts\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"footer\">\n <p>🤖 <strong>Automated by n8n Email Hygiene System</strong></p>\n <p>Report generated: {{ $json.processed_at }}</p>\n <p style=\"margin-top: 15px; opacity: 0.7;\">This report runs automatically every Friday at 5:00 PM</p>\n </div>\n </div>\n</body>\n</html>",
"options": {},
"subject": "=📧 Email Hygiene Report - {{ $now.format(\"MMM DD, YYYY\") }}"
},
"credentials": {
"gmailOAuth2": {
"id": "{{$credentials.gmailOAuth2}}",
"name": "Gmail Account"
}
},
"typeVersion": 2.1
},
{
"id": "d30f5ad6-778c-4891-90fc-c58fa49612e9",
"name": "合并1",
"type": "n8n-nodes-base.merge",
"position": [
1776,
-64
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "f48744cc-7449-43fa-8fbd-dfda525f22b8",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
-480,
-560
],
"parameters": {
"color": 7,
"width": 336,
"height": 576,
"content": "## 邮件列表卫生自动化"
},
"typeVersion": 1
},
{
"id": "071eceb8-e834-45ee-926e-cbab44953cfd",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-480,
176
],
"parameters": {
"color": 7,
"width": 320,
"height": 736,
"content": "## 所需设置(5 分钟)"
},
"typeVersion": 1
},
{
"id": "2517b984-ed20-4930-85b1-33d303e0b714",
"name": "便签2",
"type": "n8n-nodes-base.stickyNote",
"position": [
368,
160
],
"parameters": {
"color": 7,
"width": 384,
"height": 608,
"content": "## 邮件验证流程"
},
"typeVersion": 1
},
{
"id": "7c8c9273-b54f-4a3f-8131-7031cf23c806",
"name": "便签3",
"type": "n8n-nodes-base.stickyNote",
"position": [
992,
160
],
"parameters": {
"color": 7,
"width": 368,
"height": 688,
"content": "## 真/假分支"
},
"typeVersion": 1
},
{
"id": "f30a760a-0560-443c-a352-4ae7e16733a8",
"name": "便签4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1984,
-112
],
"parameters": {
"color": 7,
"width": 368,
"height": 576,
"content": "## 合并与循环完成"
},
"typeVersion": 1
},
{
"id": "dc616d16-1e8d-49e7-9ef8-0bc7234a7ea0",
"name": "便签5",
"type": "n8n-nodes-base.stickyNote",
"position": [
656,
-1056
],
"parameters": {
"color": 7,
"width": 384,
"height": 720,
"content": "## 分析与报告"
},
"typeVersion": 1
},
{
"id": "dc73ce02-5bfb-4d98-9f18-3d8753f5acf1",
"name": "便签6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1568,
-1152
],
"parameters": {
"color": 7,
"width": 384,
"height": 832,
"content": "## 自定义选项"
},
"typeVersion": 1
},
{
"id": "2816c5ba-112d-4073-b56c-5083ba104b4e",
"name": "便签7",
"type": "n8n-nodes-base.stickyNote",
"position": [
1936,
688
],
"parameters": {
"color": 7,
"width": 464,
"height": 896,
"content": "## 故障排除指南"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "b747883f-8107-45ba-be73-ac39e8076e88",
"connections": {
"Merge1": {
"main": [
[
{
"node": "Process Each Email",
"type": "main",
"index": 0
}
]
]
},
"Read Email List": {
"main": [
[
{
"node": "Process Each Email",
"type": "main",
"index": 0
}
]
]
},
"Process Each Email": {
"main": [
[
{
"node": "Calculate Statistics",
"type": "main",
"index": 0
}
],
[
{
"node": "Validate Email Address",
"type": "main",
"index": 0
}
]
]
},
"Process Valid Email": {
"main": [
[
{
"node": "Update Valid Status",
"type": "main",
"index": 0
}
]
]
},
"Update Valid Status": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 0
}
]
]
},
"Calculate Statistics": {
"main": [
[
{
"node": "Send Weekly Report",
"type": "main",
"index": 0
}
]
]
},
"Process Invalid Email": {
"main": [
[
{
"node": "Update Invalid Status",
"type": "main",
"index": 0
}
]
]
},
"Update Invalid Status": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 1
}
]
]
},
"Validate Email Address": {
"main": [
[
{
"node": "Check Validation Result",
"type": "main",
"index": 0
}
]
]
},
"Check Validation Result": {
"main": [
[
{
"node": "Process Valid Email",
"type": "main",
"index": 0
}
],
[
{
"node": "Process Invalid Email",
"type": "main",
"index": 0
}
]
]
},
"Weekly Schedule (Friday 5PM)": {
"main": [
[
{
"node": "Read Email List",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 内容创作, 多模态 AI
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
防欺诈潜在客户捕获与培育系统
通过AI评分、表格跟踪和多渠道提醒捕获和培育防欺诈潜在客户
If
Set
Code
+11
28 节点Jitesh Dugar
内容创作
自动化网红营销活动管理系统
使用Instagram/YouTube API自动化网红评估与活动管理
If
Code
Gmail
+8
24 节点Jitesh Dugar
内容创作
客户入职工作流
使用PDF、Trello、Slack、Gmail和Airtable简化客户入职流程
If
Code
Gmail
+10
22 节点Jitesh Dugar
内容创作
已验证产品退货指南生成器
使用邮件验证、PDF/图片生成和二维码自动化电商退货指南
Set
Code
Gmail
+10
23 节点Jitesh Dugar
内容创作
客户入职邮件验证
使用VerifiEmail、Gmail和Slack的自动化邮件验证与入职流程
If
Code
Gmail
+6
21 节点Jitesh Dugar
内容创作
证书生成器
使用VerifiEmail和HTMLcsstoImg生成证书并通过Gmail发送
If
Code
Gmail
+8
25 节点Jitesh Dugar
内容创作
工作流信息
难度等级
高级
节点数量20
分类2
节点类型9
作者
Jitesh Dugar
@jiteshdugarAI 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 查看 →
分享此工作流