This workflow follows the Gmail → OpenAI recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "email-task",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "email-task",
"responseMode": "responseNode",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
-1140,
260
],
"id": "0e609747-c5e8-40b1-821e-197d92a7b9ac",
"name": "Email Webhook"
},
{
"parameters": {
"modelId": {
"__rl": true,
"value": "provider-2/gpt-3.5-turbo",
"mode": "id"
},
"messages": {
"values": [
{
"content": "You are a professional email writing assistant. Create well-structured, professional emails based on user requests. Always return ONLY a valid JSON object with 'subject' and 'body' fields. Example: {\"subject\": \"Meeting Request\", \"body\": \"Dear Recipient,\\n\\nContent here...\\n\\nBest regards,\\nSender\"}",
"role": "system"
},
{
"content": "=Create a professional email with the following details:\n- To: {{ $json.body.recipientEmail }}\n- Content:{{ $json.body.content }}\n- Tone: {{ $json.body.tone || 'professional' }}\n- From: {{ $json.body.senderName || 'User' }}\n\nReturn only a JSON object with 'subject' and 'body' fields."
}
]
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.8,
"position": [
-660,
260
],
"id": "37f96268-6b29-4454-b390-3822ca6c3a16",
"name": "Generate Email",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "// Process the AI response and format for Android app\nconst webhookData = $('Email Webhook').first().json;\nconst aiResponse = $input.first().json;\n\nlet emailData;\ntry {\n // Get AI response content\n const content = aiResponse.message?.content || aiResponse.text || aiResponse.content || '';\n \n // Try to parse as JSON\n try {\n emailData = JSON.parse(content.trim());\n } catch {\n // Fallback parsing if not JSON\n const lines = content.split('\\n').filter(line => line.trim());\n const subject = lines[0]?.replace(/.*subject[:\\s]*/i, '') || 'Email';\n const body = lines.slice(1).join('\\n') || webhookData.body?.content || webhookData.content || 'Email content';\n emailData = { subject, body };\n }\n \n const executionId = 'email_' + Date.now();\n \n // Return response in the exact format expected by Android app\n return {\n id: executionId,\n status: 'success',\n data: {\n id: executionId,\n status: 'sent',\n recipient: webhookData.body?.recipientEmail || webhookData.recipientEmail,\n subject: emailData.subject?.replace(/[\"']/g, '') || 'Email',\n body: emailData.body?.replace(/\\\\n/g, '\\n') || webhookData.body?.content || webhookData.content,\n timestamp: new Date().toISOString(),\n senderName: webhookData.body?.senderName || webhookData.senderName || 'User',\n tone: webhookData.body?.tone || webhookData.tone || 'professional',\n message: 'Email sent successfully',\n messageId: 'gmail_' + Date.now()\n }\n };\n \n} catch (error) {\n // Return error response in expected format\n const executionId = 'email_error_' + Date.now();\n \n return {\n id: executionId,\n status: 'error',\n error: 'Failed to generate email: ' + error.message,\n data: {\n recipient: webhookData.body?.recipientEmail || webhookData.recipientEmail,\n originalContent: webhookData.body?.content || webhookData.content,\n timestamp: new Date().toISOString()\n }\n };\n}"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-200,
400
],
"id": "3dbb53d4-7697-4d44-a6eb-737ae7a74606",
"name": "Process Response"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ JSON.stringify($json) }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [
20,
200
],
"id": "bdcda968-e8d9-4468-9f1c-3e5a8c5ef4a9",
"name": "Send Response"
},
{
"parameters": {
"sendTo": "={{ $('Email Webhook').item.json.body.recipientEmail }}",
"subject": "={{ $json.message.content.parseJson().subject }}",
"message": "={{ $json.message.content.parseJson().body }}",
"options": {
"appendAttribution": false
}
},
"type": "n8n-nodes-base.gmail",
"typeVersion": 2.1,
"position": [
0,
0
],
"id": "0e2afa45-46d6-4ad6-8a2a-c563806f431a",
"name": "Send a message",
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
}
}
],
"connections": {
"Email Webhook": {
"main": [
[
{
"node": "Generate Email",
"type": "main",
"index": 0
}
]
]
},
"Generate Email": {
"main": [
[
{
"node": "Process Response",
"type": "main",
"index": 0
},
{
"node": "Send a message",
"type": "main",
"index": 0
}
]
]
},
"Process Response": {
"main": [
[
{
"node": "Send Response",
"type": "main",
"index": 0
}
]
]
}
},
"active": true,
"settings": {
"executionOrder": "v1"
},
"versionId": "5fa223b2-68d1-49c3-8b96-3a113d310cb0",
"id": "QRlnf6DeoK9zGD4l",
"tags": []
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
gmailOAuth2openAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
email-task. Uses openAi, gmail. Webhook trigger; 5 nodes.
Source: https://github.com/masteranany23/TaskIt/blob/a25cceccbf0ce9b0b9d1320351c46493a60f25b9/n8n-workflows/email_task.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow captures new leads via webhook, enriches and scores them with Apollo and Google Gemini, logs everything in Google Sheets, and automates outreach, reply handling, follow-ups, meeting prep
Eu Clara – Funil Kiwify Completo. Uses postgres, openAi, httpRequest, gmail. Webhook trigger; 70 nodes.
Support Triage + FAQ Draft (injection-hardened). Uses dataTable, openAi, gmail. Webhook trigger; 57 nodes.
User Signup & Verification: The workflow starts when a user signs up. It generates a verification code and sends it via SMS using Twilio. Code Validation: The user replies with the code. The workflow
Instantly map all internal URLs, perform AI-powered (ChatGPT) analysis, and deliver results in HTML via webhook, Google Sheets, or email. All from your own n8n instance!