✒️ Becky Isjwara

Email · Guide

Resend — email that just works

Send transactional email without becoming a deliverability expert.

Difficulty

Easy

Setup time

20 min

Cost

Free up to 3k/mo

Why Resend?

If your app needs to send email — magic links, sign-up confirmations, receipts, notifications — you have three options: roll your own with Postmark/SendGrid (painful), use your provider's built-in email (often terrible deliverability), or use Resend (modern, easy, cheap).

Resend was built by the folks who made react-email. The DX is noticeably better than the alternatives. I use it for every project.

What you'll use it for

  • Magic-link and password-reset emails (if you're using Supabase or similar, those send via Resend)
  • Transactional: receipts, confirmations, "your export is ready"
  • Onboarding drip sequences (via Resend's Audiences + Broadcasts)
  • Contact form submissions forwarded to your inbox

What Resend is not for: marketing newsletters at scale (use Substack, Buttondown, or ConvertKit). For that, Resend is fine but you'll want a proper newsletter tool.

Setup, step by step

  1. Sign up at resend.com
  2. Add your domain under Domains
  3. Copy the 3 DNS records (MX, SPF, DKIM) into your domain registrar
  4. Wait ~5 min for DNS to propagate, click Verify
  5. Generate an API key under API Keys → store in .env as RESEND_API_KEY
GotchaIf you use Cloudflare for DNS, set each record's proxy status to "DNS only" (grey cloud, not orange). Proxied records break email.

Sending an email (Next.js)

Install the SDK:

npm install resend

Create an API route like src/app/api/send/route.ts:

import { Resend } from 'resend';

const resend = new Resend(process.env.RESEND_API_KEY);

export async function POST(req: Request) {
  const { to, subject, html } = await req.json();

  const { data, error } = await resend.emails.send({
    from: 'You <hello@yourdomain.com>',
    to,
    subject,
    html,
  });

  if (error) return Response.json({ error }, { status: 500 });
  return Response.json({ data });
}

The from address must be on your verified domain. hello@, no-reply@, anything works — you don't need to create mailboxes, Resend handles routing.

React Email for templates

Don't write HTML emails by hand. Use react-email (same company) — you write JSX, they render to inline-styled HTML that works in every client.

npm install @react-email/components

Pricing

  • Free: 3,000 emails/month, 100/day — enough for most side projects
  • Pro ($20/mo): 50,000/month, priority support, dedicated IP option

For comparison, SendGrid's free tier is 100/day (same), but their $20/month tier is 40k emails — Resend wins on both simplicity and price once you're paying.

Common gotchas

  • First email goes to spam. Send yourself a test email, mark it as "not spam" in Gmail. After that, deliverability improves.
  • DMARC. Resend warns you to add a DMARC record. For a small project, v=DMARC1; p=none; rua=mailto:you@domain.com is fine.
  • Your dev email. In development, send to delivered@resend.dev — the Resend dashboard shows it without actually sending.

Related skills

The /landing skill doesn't set up email, but if you use /seo, the generated llms.txt and contact pages assume you'll wire up a contact form. Resend is the quickest way to make that form actually send.

Rather skip the DIY?

I'll set this up for you in an afternoon.