Blog
Email for AI agents: identity, deliverability, oversight, and MCP. Every post is also served as markdown at /blog.md.
30 July 2026 · 4 min read
Transactional and marketing email in one API
Running both kinds of mail through one vendor is fine. Running them through one sending reputation is not. Here is what has to be shared and what has to be kept apart.
30 July 2026 · 4 min read
Send a newsletter from your own app
Storing your own list and sending a broadcast from your own code, with the consent, unsubscribe and reputation parts that a loop over your users table gets wrong.
30 July 2026 · 4 min read
A Resend alternative that also runs your lifecycle email
Resend has audiences, broadcasts and automations now. Here is what emails.sh does differently, where Resend is still ahead, and what a migration actually costs.
30 July 2026 · 4 min read
How to migrate from SendGrid without changing your code
emails.sh serves SendGrid's v3 mail/send wire format, personalizations and all. Two lines of configuration in Node, one in every other language, and the order matters.
30 July 2026 · 4 min read
Email automation as code
A lifecycle sequence is a program that decides who gets mailed. Here is what it looks like as a YAML file in your repository, reviewed in a pull request and pushed from CI.
28 July 2026 · 4 min read
How to send email in Next.js with the App Router
A complete Next.js App Router email setup: a Server Action, a route handler, where the API key lives, and the runtime mistakes that break it in production.
21 July 2026 · 3 min read
How to send email from Claude Code
Give Claude Code everything it needs to add transactional email to your app in one pass: the key, the endpoint, the prompt, and the checks that catch a wrong integration.
17 July 2026 · 3 min read
How to send email from Cursor
Add transactional email to a Cursor project without the SMTP detour: a rules file, the prompt to use, and how to review what the agent wrote before you ship it.
10 July 2026 · 5 min read
Resend alternatives, compared honestly
What Resend is genuinely good at, when it stops fitting, and how Postmark, SendGrid, Mailgun, SES, Brevo and emails.sh actually differ once you migrate.
3 July 2026 · 4 min read
Why nodemailer does not work on Vercel
SMTP from a serverless function fails for reasons that have nothing to do with your code. Here is what actually happens, and the HTTPS fix that ends it.
26 June 2026 · 5 min read
The SendGrid free tier changed: what to do now
SendGrid's free sending is no longer the default answer for small projects. What changed in practice, how to decide, and how to migrate without losing deliverability.
19 June 2026 · 5 min read
SPF, DKIM, and DMARC explained for developers
What each record does, how alignment actually works, the exact DNS entries to publish, and how to move to enforcement without blocking your own mail.