Human vs product messaging
Two conversations often get conflated. They optimize for different jobs.
| Context | Job to be done | What "good" optimizes for |
|---|---|---|
Human / org email |
Custom-domain inbox, Gmail "Send mail as", DMARC/SPF/DKIM, cheap SMTP for people |
Setup friction, seat cost, collaborator access, DNS simplicity |
Product messaging |
App-triggered mail, behavioral journeys, multi-channel (email/SMS/push) |
API DX, event model, deliverability for product mail, orchestration |
Locked lane split
| Lane | Provider | Why |
|---|---|---|
Product / app mail |
Resend |
Best DX for code; keep quota and reputation for automated sends. Restrict Resend to the application. |
Human correspondence / Gmail send-as |
ZeptoMail |
Mail Agents, collaborator perms, pay-as-you-go, purpose-built SMTP without burning the app ESP. |
Product marketing + journeys |
Customer.io (+ Twilio for SMS) |
Event-driven multi-channel orchestration. Prefer over Brevo when the product emits events. |
Inbound to personal Gmail |
Cloudflare Email Routing |
Free receive/forward; not an outbound SMTP product on the free tier. |
Resend SMTP technically works for Gmail "Send mail as" (host smtp.resend.com, username literally resend, password = API key). Treat that as a footnote only — possible, not recommended. Most teams should keep Resend in the repo and give humans ZeptoMail.
Diagram
Email need
├── Human correspondence
│ ├── Inbound → Cloudflare Email Routing
│ ├── Outbound → ZeptoMail SMTP (per-user keys)
│ └── Auth → DMARC p=none → quarantine → reject
└── Product messaging
├── Hard transactional → Resend (API)
├── Journeys / marketing → Customer.io
├── SMS → Twilio (under CIO)
└── Separate marketing subdomain (e.g. news.)
See Email decision matrix for the full job table.