api-email-setup-resend · git:20260202.b236384 · 2026-02-02 · sha256 dbc2cbf1b4edbf1b

api-email-setup-resend git:20260202.b236384A

Immutable. This exact content is served forever at /api/v1/blob/dbc2cbf1b4edbf1b.

---
name: api-email-setup-resend
description: Resend email setup, domain verification
---

# Resend Email & React Email Setup

> **Quick Guide:** One-time setup for Resend email API with React Email templates in a Next.js App Router monorepo. Covers package installation, environment variables, domain verification, React Email project structure, preview server, and Better Auth integration.

---

<critical_requirements>

## CRITICAL: Before Using This Skill

> **All code must follow project conventions in CLAUDE.md** (kebab-case, named exports, import ordering, `import type`, named constants)

**(You MUST use `RESEND_API_KEY` environment variable for the server-side API key - NEVER hardcode secrets)**

**(You MUST verify your sending domain in Resend dashboard before production emails - unverified domains only allow sending to your own email)**

**(You MUST create email templates in a dedicated `packages/emails/` directory for monorepo - not inside the Next.js app)**

**(You MUST use `@react-email/components` for email components - external UI libraries like Material UI are NOT supported)**

**(You MUST configure the Resend SDK with appropriate region for your users - reduces delivery latency)**

</critical_requirements>

---

**Auto-detection:** Resend setup, resend install, React Email setup, email templates setup, RESEND_API_KEY, domain verification, SPF DKIM DMARC, transactional email setup, email preview server

**When to use:**

- Initial Resend setup in a new project
- Setting up React Email templates package in monorepo
- Configuring domain verification and DNS records
- Setting up email preview server for development
- Integrating email sending with Better Auth

**When NOT to use:**

- Sending individual emails (use `backend/email.md` for patterns)
- Email template design patterns (use `backend/email.md` for patterns)
- Marketing email campaigns (use dedicated marketing tools)
- SMS or push notifications (different service)

**Key patterns covered:**

- Resend account and API key setup
- Domain verification (SPF, DKIM, DMARC)
- React Email package structure for monorepo
- Email preview server configuration
- Next.js App Router API route setup
- Better Auth email callbacks integration
- Environment variables configuration
- Vercel deployment setup

**Detailed Resources:**

- For code examples, see [examples/](examples/):
  - [core.md](examples/core.md) - Client setup, constants, package exports
  - [templates.md](examples/templates.md) - Base layout, components, email templates
  - [integrations.md](examples/integrations.md) - Better Auth, Next.js API routes
  - [deployment.md](examples/deployment.md) - Preview server, Vercel config, checklist
- For decision frameworks and anti-patterns, see [reference.md](reference.md)

---

<philosophy>

## Philosophy

Resend is a **developer-first email API** built by the creators of React Email. It provides a simple API for sending transactional emails with excellent deliverability. React Email brings modern component patterns to email development, replacing legacy table-based HTML.

**Core principles:**

1. **Emails as React components** - Write emails with JSX, Tailwind CSS, and TypeScript
2. **Preview before send** - Local development server shows exact email rendering
3. **Monorepo separation** - Email templates in dedicated package, not mixed with app code
4. **Type-safe sending** - Full TypeScript support from template to API call

**React Email 5.0 (Current):**

- Requires Tailwind 4 (compatibility checker only supports Tailwind 4)
- Supports React 19.2 and Next.js 16
- Dark mode theming support with tested email client compatibility
- Templates can be uploaded directly to Resend dashboard via CLI

**When to use Resend:**

- Transactional emails (verification, password reset, notifications)
- Developer experience priority (best DX in the space)
- React/TypeScript stack
- Need reliable deliverability without managing email infrastructure

**When NOT to use Resend:**

- Marketing campaigns with complex analytics (use Mailchimp, SendGrid Marketing)
- Very high volume (>1M emails/month) without enterprise plan
- Non-JavaScript backend (consider Postmark, SendGrid)
- Need SMTP relay (Resend is API-only)

</philosophy>

---

<patterns>

## Core Patterns

### Pattern 1: Resend Account and API Key Setup

Create a Resend account and get your API key for development.

#### Account Setup

1. Sign up at [resend.com](https://resend.com)
2. Navigate to API Keys section
3. Create a new API key with appropriate permissions

```bash
# API key format
re_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

#### Environment Variables

```bash
# apps/client-next/.env.local

# Resend Configuration
RESEND_API_KEY=re_your_api_key_here

# Optional: Specify sending region for lower latency
# Options: us-east-1 (default), eu-west-1, sa-east-1, ap-northeast-1
RESEND_REGION=us-east-1

# Email "from" address (must be verified domain or onboarding@resend.dev for testing)
EMAIL_FROM_ADDRESS=noreply@yourdomain.com
EMAIL_FROM_NAME="Your App"
```

**Why good:** Environment variables protect secrets, region setting reduces latency, separate FROM variables enable easy updates

---

### Pattern 2: Domain Verification (Production Required)

Verify your domain to send from custom addresses. Unverified accounts can only send to your own email.

#### DNS Records Required

Add these records in your domain's DNS settings (Cloudflare, Route 53, etc.):

```markdown
## Required DNS Records

### SPF Record (TXT)

Host: @
Type: TXT
Value: v=spf1 include:amazonses.com ~all

### DKIM Records (CNAME) - Resend provides 3 records

Host: resend.\_domainkey
Type: CNAME
Value: (provided by Resend dashboard)

Host: resend2.\_domainkey
Type: CNAME
Value: (provided by Resend dashboard)

Host: resend3.\_domainkey
Type: CNAME
Value: (provided by Resend dashboard)

### DMARC Record (TXT) - Recommended

Host: \_dmarc
Type: TXT
Value: v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com
```

#### Verification Process

1. Go to Resend Dashboard > Domains
2. Click "Add Domain"
3. Enter your domain (e.g., `yourdomain.com`)
4. Copy the provided DNS records
5. Add records to your DNS provider
6. Click "Verify" - may take up to 48 hours for DNS propagation

**Why good:** Domain verification improves deliverability, prevents emails from landing in spam, required for production sending

---

### Pattern 3: React Email Package Structure (Monorepo)

Create a dedicated package for email templates in your monorepo.

#### Package Setup

```bash
# Create the emails package
mkdir -p packages/emails
cd packages/emails

# Initialize package
bun init

# Install dependencies
bun add @react-email/components resend
bun add -D react-email typescript @types/react
```

#### Package Configuration

```json
// packages/emails/package.json
{
  "name": "@repo/emails",
  "version": "0.1.0",
  "private": true,
  "main": "./src/index.ts",
  "types": "./src/index.ts",
  "scripts": {
    "dev": "email dev --port 3001",
    "preview": "email preview",
    "export": "email export --outDir dist"
  },
  "dependencies": {
    "@react-email/components": "^1.0.4",
    "resend": "^6.7.0"
  },
  "devDependencies": {
    "@types/react": "^19.0.0",
    "react-email": "^5.0.0",
    "typescript": "^5.0.0"
  }
}
```

**Why good:** Dedicated package enables reuse across apps, dev script starts preview server, separate from app code prevents bundling issues

#### Directory Structure

```
packages/emails/
├── package.json
├── tsconfig.json
├── src/
│   ├── index.ts              # Export all templates
│   ├── client.ts             # Resend client singleton
│   ├── layouts/
│   │   └── base-layout.tsx   # Shared layout wrapper
│   ├── components/
│   │   ├── button.tsx        # Reusable button
│   │   ├── footer.tsx        # Email footer
│   │   └── header.tsx        # Email header
│   └── templates/
│       ├── verification-email.tsx
│       ├── password-reset.tsx
│       ├── welcome-email.tsx
│       └── notification.tsx
└── emails/                   # For react-email dev server
    └── (symlink to src/templates or copy)
```

</patterns>

---

<critical_reminders>

## CRITICAL REMINDERS

> **All code must follow project conventions in CLAUDE.md** (kebab-case, named exports, import ordering, `import type`, named constants)

**(You MUST use `RESEND_API_KEY` environment variable for the server-side API key - NEVER hardcode secrets)**

**(You MUST verify your sending domain in Resend dashboard before production emails - unverified domains only allow sending to your own email)**

**(You MUST create email templates in a dedicated `packages/emails/` directory for monorepo - not inside the Next.js app)**

**(You MUST use `@react-email/components` for email components - external UI libraries like Material UI are NOT supported)**

**(You MUST configure the Resend SDK with appropriate region for your users - reduces delivery latency)**

**Failure to follow these rules will cause email delivery failures, security vulnerabilities, or bundling issues.**

</critical_reminders>

---

## Sources

- [Resend Next.js Documentation](https://resend.com/docs/send-with-nextjs)
- [React Email Documentation](https://react.email/docs)
- [React Email Monorepo Setup](https://react.email/docs/getting-started/monorepo-setup/npm)
- [React Email Tailwind Component](https://react.email/docs/components/tailwind)
- [Better Auth Email Configuration](https://www.better-auth.com/docs/concepts/email)
- [Resend + Better Auth Integration](https://resend.com/customers/better-auth)
- [Resend Error Handling](https://resend.com/docs/api-reference/errors)

---

**VERIFY ALL CRITICAL REQUIREMENTS BEFORE IMPLEMENTATION. RE-READ FILES AFTER EDITING TO CONFIRM CHANGES.**