Resend
A clean transactional email API for product mail, domain authentication, and event-driven sending.
Why it earns a place
Why I use it
I use Resend when an application needs to send real product email without turning SMTP configuration into its own project. The API is small, domain setup is understandable, and it fits serverless workflows well.
Use cases
Best for
- Passwordless/login emails
- Waitlist confirmations and transactional notifications
- Serverless functions and API routes
- Keeping sending separate from the mailbox you read in Gmail
Start small
Quick start
- 01Add a sending domain
Use a dedicated subdomain when possible, copy the DNS records Resend gives you into Cloudflare or your DNS host, and wait until the domain is verified.
- 02Create an API key
Create a key for the application, store it as a deployment secret rather than in source code, and scope/rotate it when the project changes hands.
- 03Send from the server
Call Resend from an API route, Worker, server action or backend job. Keep the From address on the verified domain and provide a useful Reply-To when replies should land in Gmail.
Repeatable workflows
Things I come back for
Reply in Gmail
Use Reply-To with the mailbox you actually monitor. Resend handles outbound delivery; Gmail can still be where human replies are received and answered.
- 1
Send from the verified product domain through Resend.
- 2
Set Reply-To to the mailbox a human actually checks.
- 3
Send yourself a test and reply to it before shipping the template.
Domain reputation
Avoid blasting cold campaigns from the same domain used for critical product mail. Separate transactional and outreach traffic when reputation matters.
- 1
Identify which messages are transactional versus promotional or outreach.
- 2
Keep critical product mail on a protected sending domain/subdomain.
- 3
Monitor bounces and complaints before increasing volume.
Webhooks
Use delivery/bounce events when the application needs to record message state or suppress addresses that repeatedly fail.
- 1
Create a server endpoint for the events you actually need.
- 2
Verify the webhook signature before trusting the payload.
- 3
Store only useful delivery state and suppress repeated hard failures.
Reference