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 →
{
"nodes": [
{
"id": "e7725ddb-8cdc-4e36-8a9e-5bf079d94972",
"name": "When clicking \"Test workflow\"",
"type": "n8n-nodes-base.manualTrigger",
"position": [
460,
460
],
"parameters": {},
"typeVersion": 1
},
{
"id": "7cd477d3-e7fd-4a2b-b39e-f5b00271540a",
"name": "Compose message",
"type": "n8n-nodes-base.set",
"position": [
1340,
460
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "2addc1b4-68a0-4c72-87d6-d47286eef70c",
"name": "raw",
"type": "string",
"value": "={{ \"From: \"+$('Message settings').item.json.from+\"\\nTo: \"+$('Message settings').item.json.to+\"\\nSubject: \"+$('Message settings').item.json.subject+\"\\nMIME-Version: 1.0\\nContent-Type: multipart/related; boundary=boundary1\\n\\n--boundary1\\nContent-Type: text/html; charset=UTF-8\\n\\n<html>\\n<body>\\n\"+$('Message settings').item.json.body_html+\"\\n</body>\\n</html>\\n\\n--boundary1\\nContent-Type: \"+$('Get image').item.binary.data.mimeType+\"\\nContent-Transfer-Encoding: base64\\nContent-Disposition: inline\\nContent-ID: <image1>\\n\\n\"+$json.chart1+\"\\n\\n--boundary1--\\n\" }}"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "4aca2efe-cf79-4cec-8912-44761595e9ea",
"name": "Send message",
"type": "n8n-nodes-base.httpRequest",
"position": [
1560,
460
],
"parameters": {
"url": "https://www.googleapis.com/gmail/v1/users/me/messages/send",
"body": "={ \"raw\": \"{{ $json.raw.base64Encode() }}\"}",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "raw",
"authentication": "predefinedCredentialType",
"rawContentType": "application/json",
"nodeCredentialType": "gmailOAuth2"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "75ec79b0-782a-462e-8f68-5c3f6a77190a",
"name": "Get image",
"type": "n8n-nodes-base.httpRequest",
"position": [
900,
460
],
"parameters": {
"url": "https://thistleandrose.co.uk/img/userimages/Page/0/bgmainfront.jpg",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "23d3665c-0dfe-470c-98b6-ac67bcd186ee",
"name": "Message settings",
"type": "n8n-nodes-base.set",
"position": [
680,
460
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "b640b120-cf83-4141-8a74-59da3ec1bb92",
"name": "from",
"type": "string",
"value": "sender@example.com"
},
{
"id": "a01d10b2-a61c-4173-b31c-b24c6c0859d4",
"name": "to",
"type": "string",
"value": "recipient@example.com"
},
{
"id": "1173b361-ed4b-4c3d-af96-c66b9909a4c4",
"name": "subject",
"type": "string",
"value": "Email with embedded image"
},
{
"id": "b6c8771a-f1c9-4952-9b9d-2684a8017ff4",
"name": "body_html",
"type": "string",
"value": "=<p>This email contains an embedded image:</p>\n<p><img src='cid:image1'></p>"
}
]
}
},
"typeVersion": 3.3
},
{
"id": "f2586628-8664-442b-b822-2caa075f6f4d",
"name": "Convert image to base64",
"type": "n8n-nodes-base.extractFromFile",
"position": [
1120,
460
],
"parameters": {
"options": {},
"operation": "binaryToPropery",
"destinationKey": "chart1"
},
"typeVersion": 1
},
{
"id": "69de86e7-eef2-4792-81db-1fdb930c7790",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
860,
340
],
"parameters": {
"color": 7,
"width": 168.75,
"height": 281.25,
"content": "Gets a random image from the internet. Replace this with your image (should be called 'data')"
},
"typeVersion": 1
},
{
"id": "9bf60739-3388-4394-bec4-542ec3fddbb8",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1520,
340
],
"parameters": {
"color": 7,
"width": 168.75,
"height": 281.25,
"content": "We use an HTTP node rather than the Gmail node. Add your Gmail creds here"
},
"typeVersion": 1
},
{
"id": "2700414e-3fb1-45de-9550-c1ffb5702b94",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
640,
340
],
"parameters": {
"color": 7,
"width": 168.75,
"height": 281.25,
"content": "To use the image in the body of the email, insert <img src='cid:image1'>"
},
"typeVersion": 1
},
{
"id": "81d9af8b-b232-4d15-8c7a-c773a2fb7aa8",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
160,
360
],
"parameters": {
"height": 205,
"content": "## Try me out\n1. Make sure you add your Gmail credential in the last node\n2. Update the sender and recipient in the 'Message settings' node\n3. Click 'test workflow'"
},
"typeVersion": 1
}
],
"connections": {
"Get image": {
"main": [
[
{
"node": "Convert image to base64",
"type": "main",
"index": 0
}
]
]
},
"Compose message": {
"main": [
[
{
"node": "Send message",
"type": "main",
"index": 0
}
]
]
},
"Message settings": {
"main": [
[
{
"node": "Get image",
"type": "main",
"index": 0
}
]
]
},
"Convert image to base64": {
"main": [
[
{
"node": "Compose message",
"type": "main",
"index": 0
}
]
]
},
"When clicking \"Test workflow\"": {
"main": [
[
{
"node": "Message settings",
"type": "main",
"index": 0
}
]
]
}
}
}
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.
gmailOAuth2
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
Easily send personalised emails with embedded images directly in the body using Gmail, saving time on manual attachments and ensuring professional presentation without external links. This workflow suits marketers crafting newsletters or customer support teams sharing visual updates, streamlining communication for small businesses or individuals who value quick, visually engaging outreach. The key step involves fetching an image via HTTP request, converting it to base64 format, and embedding it inline during the Gmail message composition for seamless delivery.
Use this workflow when you need to automate occasional image-inclusive emails triggered by specific events, such as responding to form submissions with branded visuals. Avoid it for high-volume campaigns better handled by dedicated email tools like Mailchimp, or when images require complex processing beyond basic HTTP fetches. Common variations include adding dynamic text from a database or integrating with Google Sheets to pull recipient details before sending.
About this workflow
Send A Message With An Inline Embedded Image With Gmail. Uses manualTrigger, httpRequest, extractFromFile, stickyNote. Event-driven trigger; 10 nodes.
Source: https://github.com/Zie619/n8n-workflows — 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.
legal_rag_telegram_api_current_github_ready. Uses telegramTrigger, httpRequest. Event-driven trigger; 56 nodes.
This workflow discovers trending topics from YouTube Most Popular and Google Trends, uses OpenAI to rank and draft Shorts-ready angles, stores items for review in Airtable, then sends approved records
This n8n workflow automatically generates presentation-style "screen recording" videos with AI-generated slides and a talking head avatar overlay. You provide a topic and intention, and the workflow h
Monitor Google Drive folder, parsing PDF, DOCX and image file into a destination folder, ready for further processing (e.g. RAG ingestion, translation, etc.) Keep processing log in Google Sheet and se
This workflow is designed for individuals and businesses looking to streamline the creation of engaging promotional videos. Whether you're marketing a product or developing a personal brand, this AI-d