Works with every Amazon SES region, in your account
A full email service for your product, not five tools. Hosted APIs resell infrastructure like SES at a 10× markup and still make you bolt on an inbox, a CRM and an automation tool. OpenSES gives you send, receive, contacts, sequences and an MCP server on the account you already have, so the domains, the reputation and the bill stay yours.
Connected to your AWS account in four minutes
No queues to operate, no keys to paste if you deploy into your own account. OpenSES talks to SES directly and listens for events through one SNS subscription it creates for you.
Connect AWS
A least-privilege IAM role from our CloudFormation link, or access keys. Pick the regions you send from.
Verify a domain
Three DKIM CNAMEs and a MAIL FROM record. Existing SES identities are imported already verified.
Send and receive
REST API, SDKs, CLI and MCP for sending. One MX record and the same domain receives into an inbox.
Grow from there
Add contacts, run onboarding sequences, and let your agent handle replies. Every event in your log and webhooks.
It starts with one request
HTML, text, React Email or a template with variables. Idempotency keys so retries never double-send, tags for search, scheduling, attachments, reply-to and custom headers. Batch up to 10k templated messages in one call via SES bulk sending.
- Idempotency-Key honoured 24h
- Schedule and cancel
- Attachments up to 40 MB
- React Email support
- Rate-limited to your SES quota
- OpenAPI 3.1 from every instance
import { OpenSES } from "openses";
const openses = new OpenSES(process.env.OPENSES_API_KEY);
await openses.emails.send({
from: "Acme <billing@acme.com>",
to: "jane@example.com",
subject: "Your invoice #1042",
react: <Invoice id={1042} />,
tags: { plan: "pro" },
idempotencyKey: "inv-1042",
});- CNAMEabc123._domainkey.acme.comabc123.dkim.amazonses.com
- CNAMEdef456._domainkey.acme.comdef456.dkim.amazonses.com
- CNAMEghi789._domainkey.acme.comghi789.dkim.amazonses.com
- MXsend.acme.comfeedback-smtp.us-east-1.amazonses.com
- TXTsend.acme.comv=spf1 include:amazonses.com ~all
DKIM, SPF and DMARC without the spreadsheet
Easy DKIM by default so private keys never leave SES, a custom MAIL FROM so SPF aligns, a DMARC record suggested for you, and live DNS checks that flip the domain to verified the moment Amazon does. On Cloudflare, one click publishes everything.
- Easy DKIM or BYODKIM
- Custom MAIL FROM
- DMARC guidance
- Imports existing identities
- Per-region identities
- One-click Cloudflare DNS
Receive on your apex or a subdomain
One MX record and your product has an inbox. SES inbound delivers to a bucket in your account; OpenSES turns each message into a thread you can read in the dashboard, reply to from the API, route with forwarding rules, or hand to your agent. Replies to sequences land here and stop the sequence automatically.
- acme.com or mail.acme.com
- Threads, labels, drafts, search
- Reply and forward from the API
- Forwarding rules to people or Slack
- Attachments stored in your S3
- Inbound events to webhooks
- Jane CooperRe: Your invoice #1042 — Paid just now, thanks for the quick turnaround.2m
- GitHub[acme/app] Deploy succeeded — Production deploy 4f2a9c finished in 1m 12s.18m
- StripePayout of $4,120.00 is on its way — Expected to arrive Nov 7.1h
- support@Fwd: Can I change my plan? — Forwarded by rule: billing → #billing3h
- day 0Welcome to Acme1,240 sent
- +2 daysSet up your first domain1,102 sent
- +5 daysNeed a hand? Reply to this email860 sent
- +12 daysYour trial ends in 48h512 sent
Onboarding and follow-ups without a marketing suite
Contacts with the properties your product cares about and a consent state per topic. Sequences are small automations: enroll from the API, a form or an inbound reply, set the delays, and OpenSES sends each step, stops when the person replies, and honours every unsubscribe and bounce.
- Custom properties and topics
- Enroll via API, form or reply
- Delays, conditions, stop on reply
- One-click and List-Unsubscribe
- Broadcasts to a segment
- CSV import, sync from your DB
Give your agents a real email address
Every instance ships an MCP server. Claude, Cursor, or the agent inside your own product can send, search the log, read and answer inbox threads, create contacts and enroll them in sequences, with the same scoped API keys you use everywhere else. Your domain, your SES, your audit log.
- send, search, read, reply tools
- contacts and sequences tools
- Scoped by API key
- OAuth for hosted agents
- Works with Claude and Cursor
- Every call in the audit log
- Reply to Jane that the invoice is settled and enroll her in the onboarding sequence.
- inbox.reply · thread th_8f21 · from billing@acme.com
- contacts.upsert · jane@example.com · plan: pro
- sequences.enroll · onboarding · jane@example.com
- Done. Replied in the thread and enrolled Jane; first step goes out now, next in 2 days.
Everything the SES console should have been
SES is the best-priced email service in the world and one of the hardest to look at. OpenSES turns its events into a log you can search, webhooks you can trust, and health you can act on.
- email.delivered200142 ms
- email.opened20098 ms
- email.bounced500 → retry 21.2 s
- email.clicked200110 ms
Webhooks with receipts
HMAC-SHA256 signed, timestamped, retried with backoff for 24 hours, replayable from the dashboard. Same event names across SDKs and webhooks.
- Daily quota12,480 / 50,000
- Send rate14 / s
- Bounce rate0.21% · < 5%
- Complaint rate0.01% · < 0.1%
Account health, per region
Sandbox status, quota, send rate, bounce and complaint rates from CloudWatch, and a guided production-access request with a pre-written justification.
Suppression list
Synced both ways with the SES account-level list. Hard bounces and complaints never get a second send.
Templates
HTML with variables, previews and test sends. Keep them in git; a visual editor is on the roadmap.
Scheduling and batch
Send later, cancel, or push 10k templated messages in one call at exactly your SES rate.
Workspaces
One per product or client, each with its own AWS connection, domains, inboxes, keys and members.
Scoped API keys
os_live_ and os_test_ prefixes, hashed at rest, read or write scopes, rotation without downtime.
Open source
AGPL-3.0, the same code as Cloud. Read it before you trust it with your email.
What you would pay for the same emails
Move the slider. The OpenSES line is what Amazon charges you; our Cloud plans are flat and never scale with volume.
- OpenSES + your SES$0.10 per 1k, pay-as-you-go$10
- ResendPro $20 · Scale $90 · $0.90/1k over$90
- SendGridEssentials → Pro tiers$35
- Postmark10k → 125k tiers$115
You keep about $25 a month versus the cheapest hosted API at this volume, and the domains, reputation and logs stay in your AWS account.
Public list prices as of November 2026, before taxes and add-ons. OpenSES Cloud plans are flat and never scale with volume.
Same product. You choose who operates it.
Both talk to your SES. Cloud is for teams that want zero ops; self-host is for teams that want zero third parties.
OpenSES Cloud
We host the console, the database and the upgrades. You connect an IAM role with an External ID; we never hold your keys. Fourteen days free, flat monthly plans after.
- No servers, no upgrades, daily backups
- Cross-account IAM role, revocable in one click
- Every SES region, team roles, audit log
- 14-day trial, then $19 or $99 a month
Self-host
Deploys into your own AWS account: a Lambda, a bucket, a CloudFront URL, any Postgres. No Docker, nothing running when idle. Every feature, no license key, AGPL-3.0.
- npx openses deploy, then a setup wizard
- The Lambda's own role talks to SES, no keys stored
- Your data in your Postgres, your retention rules
- Free forever, community support
Read the code before you trust it with your email
OpenSES is AGPL-3.0 licensed with no enterprise edition and no hidden features. Issues, roadmap and pull requests live on GitHub. Cloud exists to fund the project, not to gate it.
# self-host: deploy into your own AWS account
git clone https://github.com/openses/openses && cd openses
npx openses init && npx openses deploy
# update
git pull && npx openses deploy
# → https://mail.acme.com (setup wizard)Questions, answered
Own your email stack.
Connect your AWS account and send your first email in minutes. Keep the $0.10.