# 10 Best Transactional Email Providers for SaaS in 2026

> 10 transactional email providers compared on verified November 2026 pricing at 10k to 1M emails: Resend, Postmark, Amazon SES, PostShiba, SendGrid and more.

*Published: 2026-11-06*
*Canonical: https://makerkit.dev/blog/saas/best-transactional-email-provider-saas*

---

Resend is the best transactional email provider for most TypeScript SaaS apps in 2026: $20/month for 50,000 emails, an official Node.js SDK that renders React Email, SMTP for Supabase Auth, and an HTTP API that also runs on Cloudflare Workers. Pick Amazon SES when cost matters most ($10 for 100,000 emails at its à la carte rate) and Postmark when you want transactional-only infrastructure with up to 365 days of message history. Prices below were checked on each provider's own pricing page on 6 November 2026.

**Best transactional email provider by use case:**

| Use case | Pick | Why |
|----------|------|-----|
| Best overall for TypeScript SaaS | Resend | $20/month for 50k emails, React Email in the Node SDK, HTTP API and SMTP |
| Best free tier | Resend | 3,000 emails/month (100/day), 3 domains, no branding footer and no contact cap (Loops allows 4,000 sends but adds a footer and caps contacts at 1,000) |
| Cheapest per email | Amazon SES | $0.10 per 1,000 à la carte, $100 for 1M emails; PostShiba's flat $49 plan is cheaper if your peak fits it |
| Best for Cloudflare Workers | Resend today, Cloudflare Email Service once it leaves beta | Both send over HTTP; SMTP libraries need TCP sockets |
| Best for message history and stream separation | Postmark | 45-day history by default, up to 365 days on Pro and Platform |
| Cheaper alternative to Postmark and Mailgun | MailerSend | $68 for 100k and $600 for 1M, versus $115/$775 on Postmark |
| Product and marketing email in one tool | Loops | Unlimited transactional sends on paid plans, priced by contacts |
| Fixed monthly bill, sending from customers' domains | PostShiba (beta) | $15/month for up to 24,000 emails per 24 hours, no overage, per-customer tenants |
| Best open source | useSend | AGPL-3.0, self-hostable on top of your own SES account |
| Hard to recommend for new projects | SendGrid | Free plan retired in May 2025, 3-day activity history on Essentials |

*Last updated: 6 November 2026. Disclosure: MakerKit sells SaaS starter kits that ship Nodemailer (SMTP) and Resend mailers. Paid placements on this page are labelled "Sponsored". Sponsors don't influence rankings, scores or verdicts, and no provider paid for its position in the list.*

**Transactional email** is the one-to-one email your application sends in response to something a user did: sign-up verification, password resets, magic links, team invitations, receipts and alerts. It's sent through an API or SMTP relay, and unlike marketing email, users expect it within seconds and can't unsubscribe from it.

If you build on a [MakerKit SaaS kit](/), every web kit (Next.js, TanStack Start, React Router) ships Nodemailer (any SMTP provider) and Resend (HTTP API) behind one `MAILER_PROVIDER` variable, so any provider on this list with SMTP works without code changes, and HTTP-only APIs plug in as a custom mailer.

## How We Evaluated

We read each provider's pricing page, documentation and changelog on 6 November 2026, and computed the monthly cost of sending 10,000, 50,000, 100,000 and 1,000,000 transactional emails on monthly billing with overage enabled. We compared free tiers, HTTP API and SMTP support, the official TypeScript SDK, whether the provider works from edge runtimes, message history retention, and the volume at which a dedicated IP becomes available.

We did not run inbox-placement tests, so this guide doesn't rank providers by deliverability and doesn't repeat their deliverability claims as fact. Every price links to the page it came from.

## Two Traps That Break Email in a Real SaaS

Most transactional email failures in a new SaaS come from the setup around the provider, not from the provider. Two cause most of the "emails aren't arriving" reports.

**Trap 1: Supabase Auth's built-in email sender.** If you use Supabase Auth, your app has two email systems. Supabase sends auth emails (verification, password reset, magic links) through the SMTP settings in the Supabase dashboard. Your app sends everything else (team invites, account deletion, OTP codes) through its own mailer. The built-in Supabase sender allows 2 emails per hour, delivers only to addresses on your project's team, and is ["not meant for production use"](https://supabase.com/docs/guides/auth/auth-smtp) according to Supabase. Configure custom SMTP in the dashboard before launch. Custom SMTP starts at 30 auth emails per hour, and you can raise that limit in the [rate limits settings](https://supabase.com/docs/guides/auth/rate-limits). Supabase's docs name Resend, Amazon SES, Postmark, SendGrid, ZeptoMail and Brevo as example SMTP providers.

**Trap 2: SMTP on Cloudflare Workers.** Nodemailer depends on Node.js TCP socket APIs, so MakerKit's [Cloudflare deployment guide](/docs/next-supabase-turbo/going-to-production/cloudflare) tells you to switch to Resend's HTTP mailer (`MAILER_PROVIDER=resend`) before deploying to Workers. The safe rule for Workers: send through an HTTP email API such as Resend's, or Cloudflare's own Email Service binding. See our [Next.js hosting guide](/blog/tutorials/best-hosting-nextjs) for the other Cloudflare dependency swaps.

MakerKit's Better Auth kits (Drizzle and Prisma) don't split email the way Supabase does: they ship 14 React Email templates, and every auth email (magic links, verification, password reset, OTP codes) goes through the kit mailer, so one provider and one set of credentials covers everything. The [email inventory](/docs/nextjs-drizzle/emails/email-inventory) lists them.

## Price Comparison (November 2026)

| Provider | Free tier | 10k/mo | 50k/mo | 100k/mo | 1M/mo |
|----------|-----------|--------|--------|---------|-------|
| Resend | 3,000/mo, 100/day | $20 | $20 | $35 | $650 |
| Postmark (Basic) | 100/mo | $15 | $55 | $115 | $775 (1.5M tier) |
| Amazon SES (à la carte) | None for new accounts | $1 | $5 | $10 | $100 |
| MailerSend (Starter/Hobby) | 500/mo | $14.50 | $35 | $68 | $600 |
| Mailgun | 100/day | $15 | $35 | $75 | $700 |
| SendGrid | 60-day trial, 100/day | $19.95 | $19.95 | $34.95 | $799 (1.5M tier) |
| Cloudflare Email Service | 3,000/mo on Workers Paid | $2.45 | $16.45 | $33.95 | $348.95 |
| PostShiba (beta) | 7-day trial | $5-15 | $15 | $15 | $49 |
| useSend (cloud) | 3,000/mo, 100/day | $10 | $20 | $40 | $400 |
| Loops | 4,000 sends/30 days | $49 flat up to 5,000 contacts | | | |

*Monthly billing, transactional sends only, cheapest tier that covers the volume. Amazon SES at its à la carte rate; its default Essentials plan costs $0.16 per 1,000. Cloudflare's figures exclude the Workers Paid subscription. Loops prices by subscribed contacts, not by sends. PostShiba prices by peak capacity: the figures assume sends spread evenly (Micro allows 24,000 per 24 hours), so a bursty app needs a bigger cluster. Verified 6 November 2026 against each provider's pricing page, linked in its section below.*

At 100,000 emails a month, Resend, SendGrid and Cloudflare Email Service all cost about $35, so price only separates providers at the low and high ends. At 1M, SES costs $100 at its à la carte rate, about a sixth of Resend ($650). PostShiba's flat Small plan ($49) is cheaper still if your sending stays under 40,000 an hour, because it prices peak capacity instead of volume. Postmark is the most expensive at 50k and 100k. Older articles that cite an SES free tier are out of date: new SES accounts lost the 3,000-message free tier on 21 July 2026.

## The Providers

### 1. Resend: Best Overall for TypeScript SaaS

**What it is.** [Resend](https://resend.com) is an email API built by the team behind React Email. It offers an HTTP API, SMTP, an official Node.js SDK, inbound email, webhooks, batch sends of up to 100 emails, and idempotency keys.

**Pricing.** Free covers 3,000 emails/month with a 100/day cap, 3 domains and 30 days of history. Pro costs $20/month for 50,000 emails or $35 for 100,000, with overage at $0.90 per 1,000 once you enable pay-as-you-go. Scale starts at $90/month for 100,000 and reaches $650 for 1M. Marketing email is a separate plan billed by contacts ($40/month for 5,000). *Verified 6 November 2026 against [resend.com/pricing](https://resend.com/pricing).*

**Strengths.**
- React Email templates render directly through the SDK's `react` option
- Generous free tier: 3,000/month and 3 domains since August 2026
- HTTP API works from Node.js, serverless and edge runtimes
- Documented [Supabase SMTP setup](https://resend.com/docs/send-with-supabase-smtp)

**Weaknesses.**
- 30-day history on every self-serve plan, including Scale
- Default rate limit of 10 requests per second per team, the same on every plan
- Dedicated IPs ($30/month) only on Scale, and only above 3,000 emails per day
- No SMTP server logs, and no annual billing on self-serve plans

**Best for.** TypeScript SaaS teams that write their templates in React Email and want one provider for auth email, app email and, later, broadcasts.

**Next.js integration notes.** `npm install resend`. The SDK's `react` option is Node.js only, so on Cloudflare Workers render the template to HTML first and pass `html`. In a MakerKit kit:

```bash
# apps/web/.env
MAILER_PROVIDER=resend
RESEND_API_KEY=re_your-api-key
EMAIL_SENDER=YourApp <hello@yourapp.com>
```

For Supabase Auth, enter `smtp.resend.com`, port 465, user `resend` and your API key as the password in the dashboard's SMTP settings.

### 2. Postmark: Best for Message History and Stream Separation

**What it is.** [Postmark](https://postmarkapp.com) is a transactional-first email service that keeps transactional and broadcast email on separate sending infrastructure through "message streams."

**Pricing.** The Developer plan is free for 100 emails/month and never expires. Basic is $15/month for 10,000 emails ($1.80 per extra 1,000), $55 for 50,000 and $775 at the 1.5M tier. Pro ($16.50) and Platform ($18) add features at a slightly higher price and lower overage. Postmark cut its Pro and Platform entry prices in August 2025 (Pro at 10k went from $60.50 to $16.50). Broadcast email has no extra fee. Dedicated IPs start at $50/month per IP for senders of 300,000+ emails/month on Pro or higher. *Verified 6 November 2026 against [postmarkapp.com/pricing](https://postmarkapp.com/pricing).*

**Strengths.**
- 45-day message history on every plan, customisable up to 365 days on Pro and Platform
- Transactional and broadcast streams run on separate infrastructure
- Batch API of up to 500 messages per call
- Detailed webhooks: delivery, bounce, spam complaint, open, click, inbound

**Weaknesses.**
- Most expensive provider here at 50k and 100k emails ($115 for 100k versus $35 for Resend)
- New accounts need approval before sending to addresses outside your verified domains
- Inbound processing isn't on the Basic plan
- Free plan is 100 emails/month, enough for testing only

**Best for.** SaaS teams whose support desk needs to answer "did the invoice email arrive?" months later, and teams that want broadcast mail kept off their transactional infrastructure.

**Next.js integration notes.** The official npm package is `postmark`. With a MakerKit kit you can skip the SDK and use Nodemailer: set `MAILER_PROVIDER=nodemailer`, `EMAIL_HOST=smtp.postmarkapp.com`, `EMAIL_PORT=587`, `EMAIL_TLS=false`, and your server's SMTP credentials in `EMAIL_USER` and `EMAIL_PASSWORD`. Apply for account approval in your first week, not your launch week.

### 3. Amazon SES: Cheapest at Scale

**What it is.** [Amazon Simple Email Service](https://aws.amazon.com/ses/) is AWS's sending infrastructure: API, SMTP and the AWS SDK, with events delivered to SNS, EventBridge, CloudWatch or Firehose rather than HTTP webhooks.

**Pricing.** SES introduced pricing plans on 21 July 2026. New accounts start on **Essentials at $0.16 per 1,000 emails** with no monthly fee, which bundles features such as Virtual Deliverability Manager. You can switch to **à la carte at $0.10 per 1,000** at any time: $1 for 10k, $10 for 100k, $100 for 1M. Pro is $105/month plus $0.22 per 1,000, and Enterprise $500/month plus $0.23 per 1,000. The SES-specific free tier of 3,000 messages a month is gone for new customers; new AWS accounts get a 6-month free plan with up to $200 in AWS credits instead. Attachments cost $0.12 per GB, and a standard dedicated IP is $24.95/month. *Verified 6 November 2026 against [aws.amazon.com/ses/pricing](https://aws.amazon.com/ses/pricing/) and the [July 2026 announcement](https://aws.amazon.com/about-aws/whats-new/2026/07/amazon-ses-pricing-plans/).*

**Strengths.**
- Lowest price per email by a wide margin at every volume
- Sends transactional and marketing email on the same account
- Dedicated IPs on any plan, from $24.95/month
- Fits teams already on AWS with IAM, SNS and CloudWatch

**Weaknesses.**
- New accounts start in a sandbox: verified recipients only, 200 messages per 24 hours, 1 per second. AWS promises a first response to production-access requests within 96 hours.
- No hosted message log unless you use Virtual Deliverability Manager (30 days; included in plans, $0.07 per 1,000 on à la carte)
- Events need AWS plumbing (SNS or EventBridge) instead of a webhook URL
- AWS reviews accounts with a bounce rate of 5% or a complaint rate of 0.1%

**Best for.** Products sending 100k+ emails a month where the email bill is a line item, and teams already running on AWS.

**Next.js integration notes.** Use `@aws-sdk/client-sesv2` for the API, or SMTP through Nodemailer in a MakerKit kit:

```bash
# apps/web/.env
MAILER_PROVIDER=nodemailer
EMAIL_HOST=email-smtp.us-east-1.amazonaws.com
EMAIL_PORT=587
EMAIL_TLS=false # 587 uses STARTTLS; set true only for port 465
EMAIL_USER=your-ses-smtp-username
EMAIL_PASSWORD=your-ses-smtp-password
EMAIL_SENDER=YourApp <noreply@yourdomain.com>
```

Request production access the day you create the account. The sandbox only delivers to verified addresses, so it will hide the problem in development and break sign-ups on launch day.

### 4. MailerSend: Best Budget Managed Alternative

**What it is.** [MailerSend](https://www.mailersend.com) is the transactional email product from the team behind MailerLite, with an email API, SMTP relay, inbound routing on every plan and an official Node.js SDK.

**Pricing.** Free allows 500 emails/month (100/day) after approval, and needs a credit card. Hobby is $7/month for 5,000 emails plus $1.50 per extra 1,000, which makes 10k about $14.50. Starter is $35 for 50,000, $68 for 100,000 and $600 for 1M. Yearly billing takes 10% off. *Verified 6 November 2026 against [mailersend.com/pricing](https://www.mailersend.com/pricing), monthly billing.*

**Strengths.**
- Cheaper than Postmark and Mailgun at 100k ($68) and 1M ($600)
- Inbound routing included even on the free plan
- Official TypeScript-typed SDK (`mailersend`)
- Template builder for non-developers

**Weaknesses.**
- Activity history is 1 day on Free and Hobby, 7 days on Starter, 30 on Professional
- Dedicated IPs only on Enterprise, above 100k emails/week, price on request
- Its own pricing and help pages disagree on some limits (Hobby webhooks, Starter inbound routes)

**Best for.** Teams sending 100k+ emails a month that want a full managed dashboard at a lower price than Postmark or Mailgun.

**Next.js integration notes.** `npm install mailersend`, or use its SMTP relay with Nodemailer. Expect an approval step before the free plan sends.

### 5. Mailgun: Mature API With Dedicated IPs Included at 100k

**What it is.** [Mailgun](https://www.mailgun.com), owned by Sinch, is one of the longest-running email APIs, with a REST API, SMTP relay and webhooks on every plan, and inbound routing that grows from 1 route on Free to full access on Foundation.

**Pricing.** Free sends 100 emails/day with 1 domain and 1 day of logs. Basic is $15/month for 10,000 ($1.80 per extra 1,000). Foundation is $35 for 50,000 and $75 for 100,000. Scale reaches $700 for 1M. One dedicated IP is included from the Foundation 100k plan, and extra IPs cost $59/month. *Verified 6 November 2026 against [mailgun.com/pricing](https://www.mailgun.com/pricing/).*

**Strengths.**
- Dedicated IP included at 100k emails/month, earlier than most competitors
- Full inbound routing from Foundation
- Typed Node SDK (`mailgun.js`), actively maintained

**Weaknesses.**
- Log retention is short: 1 day on Free and Basic, 5 on Foundation, 30 on Scale
- Basic allows 1 domain and no extra users
- Since May 2025, SMTP credentials aren't generated automatically; create them manually before configuring Nodemailer

**Best for.** Teams that want a dedicated IP at around 100k emails a month without moving to an enterprise contract.

**Next.js integration notes.** Use `mailgun.js` or SMTP via Nodemailer (`EMAIL_HOST=smtp.mailgun.org`, `EMAIL_PORT=587`, `EMAIL_TLS=false`). Create the SMTP credentials in the Mailgun dashboard first.

### 6. Loops: Product and Marketing Email in One Tool

**What it is.** [Loops](https://loops.so) is an email platform for SaaS that handles transactional, product and marketing email in one place, with templates built in the Loops editor.

**Pricing.** Free covers 1,000 subscribed contacts and 4,000 sends per rolling 30 days, transactional included, with a Loops footer. Growth is $49/month for up to 5,000 subscribed contacts with unlimited transactional sends. Pricing scales by contacts, not sends. *Verified 6 November 2026 against [loops.so/pricing](https://loops.so/pricing).*

**Strengths.**
- Unlimited transactional sends on paid plans
- One tool for onboarding sequences, newsletters and transactional email
- SMTP support, including a Supabase Auth guide

**Weaknesses.**
- The API doesn't accept HTML: templates live in the Loops editor, so existing React Email templates don't carry over
- Attachments aren't generally available and need support to enable them
- Rate limit of 10 requests per second per team
- Contact-based pricing gets expensive for apps with many low-value users

**Best for.** Early SaaS teams that want lifecycle and marketing email without running a second tool, and can live with templates outside the codebase.

**Next.js integration notes.** Use the `loops` npm package and call transactional emails by `transactionalId`. In a MakerKit kit this means a custom mailer, and rebuilding the kit's React Email templates in the Loops editor.

### 7. Cloudflare Email Service: Native Sending From Workers (Beta)

**What it is.** [Cloudflare Email Service](https://developers.cloudflare.com/email-service/) sends email from Cloudflare Workers through a `send_email` binding, a REST API or authenticated SMTP. It entered public beta in April 2026.

**Pricing.** Sending to arbitrary recipients needs the Workers Paid plan, which includes 3,000 emails/month, then $0.35 per 1,000: $2.45 for 10k, $33.95 for 100k, $348.95 for 1M, plus the Workers Paid subscription. Sends to your own verified addresses are free. *Verified 6 November 2026 against [Cloudflare's Email Service pricing](https://developers.cloudflare.com/email-service/platform/pricing/).*

**Strengths.**
- No API keys for Workers: `await env.EMAIL.send({ to, from, subject, html })`
- Second-cheapest per email after SES
- Same account and dashboard as your Workers, R2 and DNS

**Weaknesses.**
- Still labelled beta in Cloudflare's docs
- New accounts start with a "conservative daily quota" that grows over time, with no published number
- No outbound delivery webhooks documented
- Not available on the Workers Free plan

**Best for.** Apps already deployed on Cloudflare Workers that are comfortable on a beta product, or as a second sender for internal notifications.

**Next.js integration notes.** The binding exists only inside a Worker, so it works for Next.js on Cloudflare via OpenNext, not on Vercel or a VPS. In a MakerKit kit it needs a custom mailer. Until it leaves beta, Resend's HTTP API is the safer choice for Workers.

### 8. PostShiba: Flat Monthly Price, Built for Sending From Customers' Domains (Beta)

**What it is.** [PostShiba](https://www.postshiba.com) is the email infrastructure behind Bento, opened to everyone as a public beta on 25 October 2026. It sends over SMTP, HTTP inject or a REST API, receives mail into hosted inboxes with signed webhooks, and gives each of your customers a separate tenant for domains, SMTP credentials, inboxes and suppressions.

**Pricing.** PostShiba charges a fixed monthly price per "cluster," sized by your busiest hour and any rolling 24 hours, with no per-email overage and no per-domain fees. Nano is $5/month (100 emails/hour, 600 per 24 hours), Micro $15 (4,000/hour, 24,000 per 24 hours), Small $49 (40,000/hour, 240,000 per 24 hours), Medium $99 and Large $299. Receiving is free, inbox storage is $0.50 per GB-month, extra shared IPs are $15/month and dedicated IPs $50/month. There is no free plan: the first cluster has a 7-day trial and needs a payment method. *Verified 6 November 2026 against [postshiba.com/pricing](https://www.postshiba.com/pricing).*

**Strengths.**
- $15/month covers 50k-100k emails if your peak fits Micro, less than everything here except Amazon SES
- A spike can't produce an overage invoice: sends over the cap are refused, not billed
- Per-customer tenants, so one customer's suspension doesn't stop the others
- Free inbound email, and dedicated IPs as a $50/month add-on
- Node SDK on npm (`@postshiba/node`) plus Convex, Inngest and Trigger.dev components

**Weaknesses.**
- Public beta since 25 October 2026, with manual production approval before you can send to external recipients
- Over the hourly or 24-hour cap, REST returns 429 and SMTP returns 451, and PostShiba says your app must keep and retry rejected messages. Size the plan for your peak, or password resets wait.
- No free plan, only a 7-day trial with a card
- Most non-JavaScript SDKs install from GitHub, not a package registry
- No published message-history retention period

**Best for.** B2B SaaS that sends email from its customers' domains, and teams that want a fixed email bill and can size for their peak hour.

**Next.js integration notes.** `npm install @postshiba/node`, then `postshiba.emails.send({ from, to, subject, html })` with a Send only API key read from an environment variable. For SMTP, PostShiba offers port 587 with STARTTLS only (no port 465), which in a MakerKit kit means `EMAIL_PORT=587` and `EMAIL_TLS=false`. It documents a Supabase Auth SMTP setup with the same port.

### 9. useSend: Best Open-Source Option

**What it is.** [useSend](https://usesend.com) is an open-source (AGPL-3.0) email platform with a hosted cloud version, a REST API, SMTP relay, webhooks and SDKs for TypeScript, Python, Go and PHP.

**Pricing.** The cloud free tier sends 3,000 emails/month with a 100/day cap. Paid has a $10/month minimum and charges $0.0004 per transactional email: $20 for 50k, $40 for 100k, $400 for 1M. Self-hosting is free, but useSend sends through your own Amazon SES account and needs SNS, Postgres and Redis. *Verified 6 November 2026 against [usesend.com](https://usesend.com) and its [self-hosting docs](https://docs.usesend.com/self-hosting/overview).*

**Strengths.**
- Open source, with a self-hosted path
- Cheap cloud pricing at mid volume
- Adds a dashboard and webhooks on top of SES's low per-email price when self-hosted

**Weaknesses.**
- Self-hosting means you run SES, SNS, Postgres and Redis yourself
- Smaller company and community than every other provider here
- Free cloud tier allows 1 domain and 1 team member

**Best for.** Teams that want SES pricing with a usable dashboard and don't mind operating it. [Plunk](https://www.useplunk.com) is a similar AGPL-3.0 option at $0.001 per email.

**Next.js integration notes.** `npm install usesend-js`, or point Nodemailer at its SMTP relay.

### 10. SendGrid: Hard to Recommend for New Projects

**What it is.** [Twilio SendGrid](https://www.twilio.com/en-us/products/email-api) is one of the largest email APIs, with HTTP and SMTP sending, an Inbound Parse webhook and a separate Marketing Campaigns product.

**Pricing.** SendGrid retired its free plan on 27 May 2025. New accounts get a 60-day trial of 100 emails/day, after which sending stops unless you upgrade. Essentials is $19.95/month for 50,000 emails or $34.95 for 100,000. Pro starts at $89.95 for 100,000 and reaches $799 at the 1.5M tier. Marketing Campaigns is billed separately from $15/month. *Verified 6 November 2026 against [SendGrid's pricing page](https://www.twilio.com/en-us/products/email-api/pricing).*

**Strengths.**
- Essentials is competitive at 50k and 100k ($19.95 and $34.95)
- Large ecosystem and long track record
- Dedicated IP included on Pro

**Weaknesses.**
- No free plan, only a 60-day trial
- 3 days of email activity history on Essentials, 7 on Pro
- No dedicated IP on Essentials, so Essentials senders share IPs
- Marketing email is a separate product and bill

**Best for.** Teams already on SendGrid with working integrations. For a new SaaS, Resend costs about the same at 100k and keeps 30 days of history.

**Next.js integration notes.** `npm install @sendgrid/mail`, or SMTP via Nodemailer with `EMAIL_HOST=smtp.sendgrid.net`, `EMAIL_PORT=587`, `EMAIL_TLS=false`, `EMAIL_USER=apikey` and your API key as `EMAIL_PASSWORD`.

## How to Choose a Transactional Email Provider

Choose based on where your app runs, then on volume, then on how long support needs message history.

- **Choose Resend if** you write TypeScript, use React Email, and send under a few hundred thousand emails a month. It's the default we'd pick for a new SaaS.
- **Choose Amazon SES if** you send 100k+ a month, the bill matters, and you're comfortable wiring SNS or EventBridge for bounce handling.
- **Choose Postmark if** support needs to look up messages from months ago, or you want broadcast mail on separate infrastructure from password resets.
- **Choose MailerSend or Mailgun if** you want a managed dashboard at 100k-1M for less than Postmark. Pick Mailgun if you want a dedicated IP included at 100k.
- **Choose Loops if** one tool for onboarding sequences, newsletters and transactional email matters more than keeping templates in your repo.
- **Choose Cloudflare Email Service if** you're already on Workers and accept a beta product's limits.
- **Choose PostShiba if** you send from your customers' domains or want a fixed bill, can size for your peak hour, and accept a beta.
- **Choose useSend if** you want open source or SES pricing with a dashboard.
- **If unsure,** start on Resend's free tier. Most providers here support SMTP, so with a Nodemailer setup switching later is usually a credentials change. Loops is the exception, because its templates live in its editor.

Whichever you pick, send transactional and marketing email from different streams or subdomains. In our view, a spam complaint about a newsletter shouldn't put your password-reset emails at risk.

## Quick Recommendation

**Resend is best for:**
- TypeScript SaaS teams using React Email
- Apps deployed to Vercel, a Node.js server or Cloudflare Workers
- Projects that want one provider for Supabase Auth and app email

**Skip Resend if:**
- You send 1M+ emails a month and price dominates (Amazon SES à la carte is about a sixth of the cost)
- Support needs more than 30 days of message history (Postmark)

**Our pick:** Start on Resend, move high-volume sending to Amazon SES when the email bill passes about $100 a month, and use Postmark when message history matters more than price.

{% faq
   title="Frequently Asked Questions"
   items=[
     {"question": "What is the best transactional email provider for SaaS in 2026?", "answer": "Resend is the best default for TypeScript SaaS apps in 2026: $20/month for 50,000 emails, an official Node.js SDK with React Email support, SMTP for Supabase Auth, and an HTTP API that runs on Cloudflare Workers. Amazon SES is the cheapest at scale and Postmark is the best for long message history."},
     {"question": "What is the cheapest transactional email service?", "answer": "Amazon SES. At its à la carte rate of $0.10 per 1,000 emails, 100,000 emails cost $10 and 1 million cost $100. New accounts start on the Essentials plan at $0.16 per 1,000, which bundles extra features, and can switch to à la carte at any time. Cloudflare Email Service is next at $0.35 per 1,000 after 3,000 included emails on the Workers Paid plan. PostShiba, in beta, charges a flat monthly price by peak capacity instead ($49 for up to 240,000 emails per 24 hours), which beats SES at high volume if your sending is spread evenly."},
     {"question": "Does SendGrid still have a free plan?", "answer": "No. Twilio SendGrid retired its free plan on 27 May 2025. New accounts get a 60-day trial limited to 100 emails per day, and sending stops when the trial ends unless you upgrade. Essentials starts at $19.95/month for 50,000 emails. For a free alternative, Resend's free tier sends 3,000 emails a month."},
     {"question": "Does Amazon SES still have a free tier?", "answer": "Not for new customers. Since 21 July 2026, the SES-specific free tier of 3,000 messages per month is no longer offered to new accounts, which start on the Essentials plan at $0.16 per 1,000 emails (à la carte is $0.10 per 1,000). New AWS accounts get a 6-month free plan with up to $200 in AWS credits instead."},
     {"question": "Why are my Supabase auth emails not sending?", "answer": "Supabase Auth's built-in email sender allows only 2 emails per hour and delivers only to addresses on your project's team; Supabase says it is not meant for production. Configure custom SMTP in the Supabase dashboard with a provider such as Resend, Amazon SES or Postmark. Custom SMTP starts at 30 auth emails per hour and the limit can be raised in the rate limits settings."},
     {"question": "Can I send email from Cloudflare Workers?", "answer": "Yes. The reliable path is an HTTP email API such as Resend, because Nodemailer depends on Node.js TCP socket APIs; MakerKit's Cloudflare deployment guide switches the kit to its Resend HTTP mailer for that reason. Cloudflare's native option is Cloudflare Email Service, which sends through a send_email Worker binding, is in public beta, and requires the Workers Paid plan."},
     {"question": "Do I need a dedicated IP for transactional email?", "answer": "Not at typical early SaaS volume. Providers only offer dedicated IPs above set volumes: Resend above 3,000 emails per day on Scale, Postmark from 300,000 emails per month, and Mailgun includes one from its 100,000-email Foundation plan. Below those volumes, the provider's shared IP pools are the default."},
     {"question": "Should transactional and marketing email use the same provider?", "answer": "They can, but keep them on separate streams or subdomains so newsletter complaints don't affect password resets. Postmark runs broadcast streams on separate infrastructure at no extra cost, Resend bills marketing separately by contacts, and SendGrid sells marketing as a separate product."}
   ]
/%}

## Sending Email From a MakerKit Kit

Every MakerKit web kit (Next.js, TanStack Start and React Router) ships two mailers in `packages/mailers`: Nodemailer for any SMTP provider and Resend over HTTP, switched with `MAILER_PROVIDER`. Any other provider, including Cloudflare's binding or Loops, plugs in as a [custom mailer](/docs/next-supabase-turbo/emails/custom-mailer) registered in the same registry.

- **Supabase kits** send app emails through the kit mailer and auth emails through Supabase Auth's SMTP settings. Configure both before launch: [email configuration](/docs/next-supabase-turbo/emails/email-configuration) and [authentication emails](/docs/next-supabase-turbo/going-to-production/authentication-emails).
- **Drizzle and Prisma kits (Better Auth)** send every auth email through the kit mailer, alongside invites and account emails. One provider covers everything.
- **Cloudflare deploys** need `MAILER_PROVIDER=resend` or a custom HTTP mailer, as the [Cloudflare deployment guide](/docs/next-supabase-turbo/going-to-production/cloudflare) explains.

If you're choosing the rest of your stack too, our [Better Auth vs Clerk vs Supabase Auth comparison](/blog/tutorials/better-auth-vs-clerk) and [Next.js hosting guide](/blog/tutorials/best-hosting-nextjs) use the same method. MakerKit kits are a one-time purchase; [see the kits](/pricing) if you'd rather start with the email, auth and billing wiring already done.
