Next.js
Sending Emails
Sending transactional emails in Next.js using Resend and React Email.
Email Send API: Using the Resend SDK to dispatch an email via a route handler.
app/api/send/route.ts
TS
import { NextResponse } from 'next/server';
import { Resend } from 'resend';
import { WelcomeEmail } from '@/components/emails/WelcomeEmail';
const resend = new Resend(process.env.RESEND_API_KEY);
export async function POST(request: Request) {
try {
const { email, name } = await request.json();
const data = await resend.emails.send({
from: 'Acme <onboarding@resend.dev>',
to: [email],
subject: 'Welcome to Acme!',
react: WelcomeEmail({ firstName: name }),
});
return NextResponse.json(data);
} catch (error) {
return NextResponse.json({ error }, { status: 500 });
}
}
React Email Template: A responsive email template built with React components.
components/emails/WelcomeEmail.tsx
TSX
import * as React from 'react';
import { Html, Head, Body, Container, Text } from '@react-email/components';
interface WelcomeEmailProps {
firstName: string;
}
export const WelcomeEmail: React.FC<Readonly<WelcomeEmailProps>> = ({
firstName,
}) => (
<Html>
<Head />
<Body style={main}>
<Container style={container}>
<Text style={heading}>Welcome to Acme, {firstName}!</Text>
<Text style={paragraph}>
We're thrilled to have you on board. Let us know if you have any questions.
</Text>
</Container>
</Body>
</Html>
);
const main = {
backgroundColor: '#ffffff',
fontFamily: 'HelveticaNeue,Helvetica,Arial,sans-serif',
};
const container = {
margin: '0 auto',
padding: '20px 0 48px',
};
const heading = {
fontSize: '24px',
letterSpacing: '-0.5px',
lineHeight: '1.3',
fontWeight: '400',
color: '#484848',
padding: '17px 0 0',
};
const paragraph = {
fontSize: '15px',
lineHeight: '1.4',
color: '#3c3f44',
};