Sending emails from your workflows is one of the most common n8n tasks — and one of the most searched. Whether you want to notify a team member when a form is submitted, send a confirmation to a new customer, or alert yourself when an API errors out, n8n has you covered.
This tutorial walks you through all three email options: Gmail, generic SMTP, and Outlook. I'll also share the workflow JSON at the end so you can copy-paste it straight into your n8n instance.
Option 1: Gmail node (easiest for personal use)
The Gmail node uses OAuth2 and is the fastest way to get started if you already have a Google account.
Setup:
- In n8n, create a new Gmail credential (OAuth2 type)
- Follow the OAuth consent screen — you'll need to allow n8n to send mail on your behalf
- Drag a Gmail node into your workflow
- Set Operation to "Send"
- Fill in To, Subject, and Message fields — you can use expressions like
{{ $json.email }}to pull values from previous nodes
Limitations: Gmail rate-limits to ~500 emails/day on free accounts. For bulk sending, use SMTP or a transactional provider (Resend, SendGrid, Mailgun).
Option 2: Send Email node (SMTP — works with any provider)
The Send Email node is provider-agnostic. It works with Gmail SMTP, Mailgun, Resend, SendGrid, Postmark, or your own mail server.
Gmail SMTP settings:
- Host:
smtp.gmail.com - Port:
465(SSL) or587(TLS) - User: your Gmail address
- Password: an App Password (not your regular password — generate one at myaccount.google.com/apppasswords)
Resend SMTP settings (recommended for transactional):
- Host:
smtp.resend.com - Port:
465 - User:
resend - Password: your Resend API key
Node config:
- Add a Send Email node
- Create a new credential → fill in host/port/user/password
- Set From, To, Subject, Text or HTML body
- Connect it after whatever trigger you're using
Option 3: Microsoft Outlook node
If your team is on Microsoft 365, use the Microsoft Outlook node:
- Create a Microsoft credential (OAuth2)
- Grant mail.send permissions in Azure AD
- Drag the Microsoft Outlook node, set Operation to "Send"
A complete example: send a confirmation email when a form is submitted
Here's a real workflow that fires on every Tally form submission and sends a confirmation to the submitter:
Nodes:
- Webhook trigger (POST from Tally)
-
Send Email node → uses SMTP, pulls
{{ $json.body.data.fields[0].value }}as the recipient email
Subject: "Got your submission — here's what happens next"
Body:
Hi {{ $json.body.data.fields[1].value }},
We received your submission and we'll be in touch within 24 hours.
Thanks,
The Team
That's it. Two nodes, zero code.
Common issues
"Authentication failed" on Gmail SMTP
You need an App Password, not your regular Gmail password. Go to myaccount.google.com/apppasswords, generate one, and use that.
Emails going to spam
If you're sending from Gmail SMTP at volume, switch to a transactional provider (Resend/Mailgun) with proper SPF/DKIM records. Gmail SMTP is for low-volume or personal use.
"Connection timed out" on port 465
Try port 587 with TLS instead. Some hosting environments block 465.
Free workflow JSON
I'll drop the full workflow JSON for the form → Send Email confirmation flow in the comments below — copy it, import it into n8n (Settings → Import Workflow), swap in your SMTP credentials, and you're live in under 5 minutes.
If you want 10+ pre-built production-ready n8n workflows (lead capture → CRM, Stripe receipt, form → Google Sheets, webhook router, and more) I packaged them all into one starter pack: n8n Workflow Starter Pack — $29 on Gumroad.
Every workflow comes with the JSON file, a plain-English walkthrough, and setup notes. One purchase, unlimited use.
Drop a comment if you run into any issues with your email node setup — happy to help debug.
Top comments (1)
Here is the free workflow JSON for the form to Send Email confirmation flow.
Import via Settings > Import Workflow, then swap in your SMTP credentials and update the To field expression.
Update the
={{ $json.body.email }}expression to match your actual form field path. Drop a reply if you hit any snags.