Introduction
Sometimes you want to send daily updates or summaries automatically, whether it’s business reports, news updates, or personal reminders. Many tutorials use paid email services like SendGrid or Mailgun, but you can do it for free using Gmail SMTP in n8n. In this guide, we’ll set up an n8n workflow that sends daily email summaries using Gmail’s free SMTP service. No coding required, just a bit of configuration.
Step-by-Step Guide
1. Prerequisites
- A Google (Gmail) account
- n8n installed (self-hosted or cloud)
- App password from Gmail (since direct login with your Gmail password won’t work for security reasons)
How to Get Gmail App Password?
- Go to Google Account → Security.
- Enable 2-Step Verification (if not already enabled).
- Go to App Passwords.
- Create a new password for your email account and device name.
- Copy and save it (you’ll need it in n8n).
2. Workflow Overview
We’ll use
- Cron Node: To schedule daily runs.
- Function Node: To prepare email content.
- Email Node (SMTP): To send email via Gmail.
3. Workflow Setup in n8n
Step 1. Add Cron Node.
- Mode: Every Day
- Time: Choose your desired sending time.
Step 2. Add Function Node (Prepare the summary content).
return [
{
json: {
subject: "Daily Summary - " + new Date().toLocaleDateString(),
body: "Hello,\n\nHere’s your daily summary:\n\n1. Task updates\n2. News highlights\n3. Personal reminders\n\nBest Regards,\nYour Automation Bot"
}
}
];
Step 3. Add Email Node.
- SMTP Host: smtp.gmail.com
- Port: 465 (SSL) or 587 (TLS)
- User: Your Gmail address
- Password: Gmail App Password
- From Email: Your Gmail address
- To Email: Recipient email
- Subject: {{$json["subject"]}}
- Text: {{$json["body"]}}
- SSL/TLS: Enabled
4. n8n Workflow JSON
Here’s the full export you can import directly into n8n.
{
"name": "Daily Gmail SMTP Summary",
"nodes": [
{
"parameters": {
"triggerTimes": [
{
"hour": 9,
"minute": 0
}
]
},
"name": "Cron",
"type": "n8n-nodes-base.cron",
"typeVersion": 1,
"position": [200, 300]
},
{
"parameters": {
"functionCode": "return [\n {\n json: {\n subject: \"Daily Summary - \" + new Date().toLocaleDateString(),\n body: \"Hello,\\n\\nHere’s your daily summary:\\n\\n1. Task updates\\n2. News highlights\\n3. Personal reminders\\n\\nBest Regards,\\nYour Automation Bot\"\n }\n }\n];"
},
"name": "Prepare Summary",
"type": "n8n-nodes-base.function",
"typeVersion": 1,
"position": [400, 300]
},
{
"parameters": {
"fromEmail": "[email protected]",
"toEmail": "[email protected]",
"subject": "={{$json[\"subject\"]}}",
"text": "={{$json[\"body\"]}}",
"options": {},
"transport": {
"service": "gmail",
"secure": true,
"auth": {
"user": "[email protected]",
"password": "your-gmail-app-password"
}
}
},
"name": "Send Email",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 1,
"position": [600, 300]
}
],
"connections": {
"Cron": {
"main": [
[
{
"node": "Prepare Summary",
"type": "main",
"index": 0
}
]
]
},
"Prepare Summary": {
"main": [
[
{
"node": "Send Email",
"type": "main",
"index": 0
}
]
]
}
]
}
5. Testing the Workflow
- Manually run the workflow first to ensure the email sends successfully.
- Check the Gmail Sent folder to confirm.
-
- If you get errors, ensure.
- App Password is correct
- Less Secure Apps setting is enabled (if using older Gmail settings)
- Correct SMTP port and encryption
Conclusion
With this setup, you can easily send daily email summaries using n8n and Gmail SMTP—without paying for third-party email services. This method works great for personal updates, team summaries, or business reports. You can extend it by pulling data from APIs, Google Sheets, or databases before sending the email.
Automation like this saves time, ensures consistency, and keeps your recipients informed—all for free.