The centralized inbox for SaaS teams. One unified timeline per customer — marketing, notifications, and support emails collapsed into a single view, per person.
Every interaction with a customer matters, and context compounds. saasmail pulls the promo blast, the billing receipt, and the support thread into the same conversation, so anyone on your team can respond with the full history already in hand.
Self-hosted on Cloudflare Workers. Receive with Cloudflare Email Workers. Send with Cloudflare Email Sending, Resend, Bavimail, or Postmark.
SaaS teams that want a self-hosted email stack on Cloudflare Workers — one shared, per-customer inbox for marketing, transactional, and support mail — without renting a VM or operating a traditional mail server. If you have a domain, a Cloudflare account, and want to own your customer email data for ~$5/month, this is for you.
Prerequisites: a domain on Cloudflare with Email Routing available, the Workers Paid plan, and Node.js v18+.
The fastest path is the Claude Code onboarding skill — it provisions every Cloudflare resource, fills out your config, runs migrations, and deploys for you:
git clone https://github.com/choyiny/saasmail.git
cd saasmail
claude # then run /saasmail-onboardingFirst successful result: your worker is live at your domain, and visiting it prompts you to create the first admin account. Name an inbox, send yourself a test email, and watch it land on a customer timeline.
Prefer to wire it up by hand? See Setup (~8 steps).
Full docs live in docs/.
Deploy and operate: Setup · Email providers · Configuration · Updating · Architecture · Local development
Features: Inboxes and timelines · Email templates · Sequences · Suppressions and unsubscribe · Users and API keys · MCP server · WebMCP · Webhooks
Everything runs inside a single Cloudflare Worker — no separate mail server to operate. See Architecture for the full diagram and the component-by-component breakdown.
GiveFeedback.dev uses AI to turn client screen recordings into actionable tasks and prevent scope creep.
One person's mail across four inboxes, collapsed into a single timeline — filter by inbox and reply inline.
saasmail-demo.1.mp4
One timeline per customer — every inbox a person has emailed collapses into a single conversation, with per-inbox tabs and a chat-style composer.
Agent Plan (WebMCP) — connect a browser AI agent and watch it work the inbox: it reads a playbook, lays out a live plan, and ticks steps off while a bottom-right feed groups each tool call as it runs.
Table overview — stat tiles plus a sortable people table spanning every inbox, with unread and attachment indicators.
Templates & sequences — reusable {{variable}} email templates and multi-step drip campaigns you enroll contacts into.
- One timeline per customer — marketing, transactional, and support mail from a person, collapsed into one conversation.
- Multi-inbox with team permissions — many inbound addresses on one deployment; members see only the inboxes they're assigned.
- Thread or chat, per inbox — formal threading for
marketing@, iMessage-style bubbles forsupport@. - Per-inbox forwarding — re-send inbound mail to any address through your own provider, sidestepping the IP blocks that break Email Routing forwards.
- Email templates — reusable HTML with
{{variable}}interpolation, sections, and a validated send contract. - Sequences — multi-step drip campaigns with delay overrides and auto-cancel on reply.
- Suppressions and unsubscribe — RFC 8058 one-click unsubscribe, a suppression list enforced on every send path, and a
transactionalbypass. - Users and API keys — invite-only onboarding, passkeys, and scoped
sk_…keys. - MCP server — connect Claude or any MCP client to your inbox over OAuth 2.1, scoped to that user's inboxes.
- WebMCP — 20 in-page tools so a browser AI agent can work the inbox as the signed-in user. Reads and drafts; never sends or deletes.
- Webhooks — HMAC-signed
message.receivedcallbacks for help-desk automation.
| Cloudflare | Resend | Bavimail | Postmark | |
|---|---|---|---|---|
| Sending | ✅ | ✅ | ✅ | ✅ |
| Receiving | ✅ | ❌ | ❌ | ❌ |
Pick one outbound provider at deploy time — see Email providers for the per-provider config and the runtime selection order.
$5/month for the Cloudflare Workers Paid plan, which includes 3,000 emails per month of Cloudflare Email Sending at no extra cost. That's it.
No VM to rent. No sprawling cloud console to learn. Just a domain, a Cloudflare account, and the Workers Paid plan.
- Agentic email steering — AI-driven conversation flows that intelligently gather information from contacts through multi-turn email exchanges
See CONTRIBUTING.md. All participants are expected to follow the Code of Conduct. Security issues: see SECURITY.md.
This repo ships a CLAUDE.md at the project root with a few notes the maintainer uses when pairing with Claude Code. It's harmless to ignore if you're not using Claude Code.
The name "saasmail" and the saasmail logo are used by the original project to identify it. You are free to fork and redistribute the source under the Apache 2.0 license, but please rename your fork (and replace public/saasmail-logo.png) if you run it as a branded product, so users aren't confused about which project they're installing.





