Resources · Platform Building Blocks

Email providers

Sending mail from your MVP without landing in spam, and which provider to pick for transactional, marketing, and inbound.

Email is the single hardest infrastructure problem for a new domain. The protocols are old, the deliverability rules are unwritten, and the major inbox providers (Gmail, Outlook, Yahoo) treat unknown senders with the suspicion they probably deserve. Pick the right provider, set up DNS correctly, and most of the pain goes away.

Resend

Resend is what this site uses for /api/auth magic links and the contact form. It's $0/mo for the first 3,000 emails per month with a 100/day cap on the free tier, $20/mo for the Pro tier (50k emails/mo, no daily cap), and the developer experience is the cleanest in the category. Their React Email integration means you can write templates as components and preview them in a browser.

import { Resend } from "resend"
const resend = new Resend(process.env.RESEND_API_KEY)

await resend.emails.send({
  from: "auth@yourdomain.com",
  to: user.email,
  subject: "Your sign-in link",
  react: <MagicLinkEmail url={url} />,
})

The single best thing about Resend for an MVP is onboarding@resend.dev — a shared sender they let you use before you've verified your own domain. You can ship a working magic-link login in five minutes and worry about DNS records the next day. Don't ship to production using it (mail comes from resend.dev, which is fine for testing and weird in front of paying users), but it kills the "is my code wrong or is my DNS wrong" debugging trap.

Postmark

Postmark is the deliverability nerd's pick. They split transactional and "broadcast" (marketing) into separate servers with separate IP reputations, which is exactly the right architecture, and they aggressively suspend accounts that send marketing through transactional streams. The free tier is 100 emails/mo (low, on purpose), then $15/mo for 10,000 emails on the Starter plan.

If your MVP is sending password resets, receipts, and account notifications and absolutely nothing else, Postmark's deliverability is hard to beat. The DX is a step behind Resend — the dashboard is older, the SDKs are fine but not delightful — but the inbox placement is excellent.

SendGrid

SendGrid (now Twilio SendGrid) is the enterprise-feeling option. Free tier is 100 emails/day forever, and the cheapest paid plan jumps to $19.95/mo for 50,000 emails. The product is sprawling: marketing campaigns, transactional, contact lists, A/B tests, dynamic templates, and an SMTP relay you can point legacy software at.

The DX is the worst on this list. The dashboard navigation has accumulated layers of acquisitions, and the API has multiple incompatible versions. We reach for SendGrid when an MVP is migrating from a legacy system that already uses it. Otherwise, Resend or Postmark.

AWS SES

SES is the wholesale option. $0.10 per 1,000 emails sent, $0.10 per GB of attachments, and effectively unlimited scale. The DX is "you are an AWS customer now" — IAM policies, regional endpoints, and the sandbox-mode requirement that your account be approved before you can send to addresses you don't own.

This site uses SES + Lambda for inbound mail at privacy@vibecodersguidetomvp.help, which forwards to a Gmail address. SES doesn't have a "forward this to my Gmail" checkbox; you wire it up with an SES rule that drops mail into S3 and a Lambda that re-sends it from a verified sender. The whole pipeline costs pennies a month even at moderate volume.

For outbound, SES makes sense at scale (millions of emails per month) where the per-message cost actually matters, or when you need a specific feature like custom MAIL FROM domains for deliverability tuning. For an MVP sending under 50,000 emails/mo, the price difference vs. Resend is rounding error and the DX gap is real.

Loops

Loops is the marketing-focused one. $25/mo for the Starter plan with up to 1,000 contacts, scaling up by contact count. The product is built around lifecycle email sequences (drip campaigns, onboarding sequences, re-engagement) with a visual flow builder that's actually pleasant. They added transactional sending more recently but it's not their primary focus.

If you've decided you want a separate marketing tool from your transactional one — which is the right call once you start sending newsletters — Loops is the one to try first.

Mailgun

Mailgun is the legacy choice. It works. The pricing is competitive ($35/mo for 50,000 emails on the Foundation plan). The DX has not aged as gracefully as Resend's. We don't pick Mailgun for new projects; we acknowledge it when migrating an existing one.

Transactional vs marketing

These are different products with different deliverability profiles, and providers care which one you're sending.

Category Examples Frequency Recipient expectation
Transactional Magic links, receipts, password resets, alerts Triggered by user action Wanted, expected within seconds
Marketing Newsletters, product updates, drip sequences Scheduled by you Opt-in, less urgent
Notifications Digest emails, weekly summaries Periodic Mixed (often opted-in)

Sending marketing email from a transactional service violates most providers' terms and tanks your sender reputation when recipients mark it as spam. Sending transactional email from a marketing platform is technically fine but adds latency and weird template overhead. Once you have both, run two providers, two domains (or two subdomains), two reputations.

Domain verification: SPF, DKIM, DMARC

Before any of this works, your domain needs three DNS records. Every provider walks you through them; here's what they do.

Record Purpose What it looks like
SPF Lists which servers are allowed to send mail "from" your domain v=spf1 include:amazonses.com include:_spf.resend.com -all
DKIM Cryptographic signature on every outgoing message resend._domainkey IN TXT "p=MIGfMA0GCSqG..."
DMARC Tells inbox providers what to do when SPF/DKIM fail v=DMARC1; p=quarantine; rua=mailto:dmarc@yourdomain.com

Resend, Postmark, and SES all give you the exact strings to paste into Cloudflare or whoever runs your DNS. Set them, wait an hour, send a test message to a Gmail address, click "show original," and confirm SPF, DKIM, and DMARC all say "PASS." If any of them say "FAIL" or "softfail," fix it before you send anything to a real user.

DMARC starts at p=none (monitor only), then graduates to p=quarantine (suspicious mail goes to spam), then p=reject (suspicious mail is bounced). Start at none for the first week so you can see what's happening, then tighten.

Inbound mail

Most MVPs only think about outbound, but inbound is useful: a support@, a privacy@, a feedback@ that lands in a real inbox. The cheapest path is SES + Lambda: SES receives mail at your domain, drops it into S3, a Lambda function rewrites the headers and re-sends the message to your Gmail. Around $0.01/mo for typical volume. This site's privacy@vibecodersguidetomvp.help runs exactly this pipeline.

Resend launched inbound parsing in 2024 and it's the easier path if you're already on Resend. Postmark has inbound webhook support and it's solid. Pick whatever your outbound provider is unless you have a reason not to.

Pre-warming a new domain

A brand-new domain has no sender reputation. If you blast 10,000 emails on day one, Gmail will quietly drop most of them in spam and SES will throttle you. The fix is warming: send a small number of emails the first day, double it the next day, double it the day after, and so on for two to three weeks before you hit full volume.

For an MVP, this rarely matters because you don't have 10,000 users on day one. The case where it does matter is moving from a legacy provider to a new one — the new provider's IPs need warming even though your domain is established. Pick a launch date and start warming three weeks earlier.

Comparison

Provider Free tier Focus Inbound Deliverability DX
Resend 3,000/mo (100/day) Transactional + light marketing Yes Strong Best in class
Postmark 100/mo Transactional only (strict) Yes Strongest Solid
SendGrid 100/day forever Both Yes Decent Cluttered
AWS SES 200/day from EC2 Wholesale outbound + inbound Yes Strong (with effort) AWS-flavored
Loops 14-day trial Marketing / lifecycle No Good Pleasant
Mailgun 100/day, 30 days Both (transactional roots) Yes Decent Dated

Anti-patterns we keep seeing

Don't send from your personal Gmail SMTP. Gmail caps you at 500 messages/day per account and rate-limits the API aggressively. More importantly, your personal Gmail's deliverability has nothing to do with your product domain, and once you do hit a limit you've either lost a working personal email or had to set up "App Passwords" you'll forget.

Don't send a single production email without SPF, DKIM, and DMARC set up. Gmail will deliver one or two unsigned messages from a new domain and then start dropping them in spam silently. By the time you notice, the reputation hit is real.

Don't hand-roll HTML email templates with inline CSS without testing in actual clients. Gmail strips <style> tags. Outlook desktop renders tables differently than every other client on earth. Use React Email or MJML to compile to inline-styled HTML, and use a service like Litmus or mailtrap.io (or just send to a few real Gmail/Outlook/iCloud accounts) to verify.

Don't put unsubscribe links in transactional email. Aside from being technically wrong (transactional mail isn't covered by CAN-SPAM unsubscribe rules and unsubscribing from your password resets is nonsense), it teaches users to look for the link in every email and increases spam complaints when they can't find one.

Don't send from noreply@. It tells users you don't want to hear from them. Send from auth@ or hello@ or support@ and have a human-ish inbox catch the replies.

Our recommendation

For an MVP in 2026, use Resend for transactional email. It's what this site uses, it's what the Vibe Coder's Guide skills generate code for, and the 3,000-email free tier covers most projects until they're paying-customer real. Start with onboarding@resend.dev to ship in five minutes, swap to your own verified domain once you've added the DNS records.

For inbound or high-volume outbound, use AWS SES. The DX is rougher but the price is right and the scale is unlimited. The SES + Lambda email-forwarder pattern is the right answer for privacy@, support@, and similar shared inboxes.

For marketing email, when you're ready, use Loops. Keep it on a separate sender (e.g., news@yourdomain.com) so a marketing reputation hit doesn't take down your password resets.