Resend: Email Without SMTP Pain
til
A modern email API that skips the SMTP server headache

Sending Emails Without the Fuss
Recently needed to add email notifications to a web form—admin alerts and user confirmations. The thought of configuring an SMTP server made me wince. Then I found Resend.
What Is It?
Resend is an email API for developers. Instead of wrestling with SMTP servers, mail transfer agents, and deliverability nightmares, you just… call an API.
import resend
resend.api_key = "your-api-key"
resend.Emails.send({
"from": "hello@yourdomain.com",
"to": "recipient@example.com",
"subject": "Hello!",
"html": "<p>Your email body here</p>"
})That’s genuinely it.
The Good Bits
- No SMTP configuration — No ports, no TLS certificates, no authentication headaches
- Attachments are easy — Pass base64 content or file paths
- HTML emails just work — Style them however you like
- Generous free tier — 3,000 emails/month at time of writing
- Great dashboard — See delivery status, bounces, opens
- Vercel-friendly — Works beautifully with serverless functions
The Trade-offs
- Vendor lock-in — You’re dependent on their service
- Domain verification required — Need to add DNS records for sending
- Not self-hosted — If that matters to your use case
- Rate limits on free tier — 100 emails/day limit
My Use Case
For a membership form, I set up two email types:
- Admin notification — HTML email with form data + CSV attachment
- Applicant confirmation — Friendly receipt with next steps
Both fire when the form submits. If emails fail, the form submission still succeeds (data saved to DB), so nothing gets lost.
Quick Tips
- Store
RESEND_API_KEYin environment variables - Always handle email failures gracefully—don’t break your main flow
- The
fromaddress domain must be verified in your Resend dashboard - CSV attachments need content as a list of bytes:
list(csv_content.encode())
Verdict
For hobby projects, internal tools, or MVPs where you just need email to work, Resend removes a lot of friction. Would reach for it again.