Amazon SES is powerful and cheap per message, but receiving email means wiring receipt rules to S3, SNS, and Lambda and parsing raw MIME yourself — and new accounts start sandboxed. MailKite POSTs the parsed message to your webhook as clean JSON, needs no AWS plumbing, and lets you send the moment your domain passes DNS verification.
SES is a serious piece of infrastructure — rock-solid deliverability on AWS IPs and about the lowest per-email price anywhere, which is hard to beat for pure high-volume sending. The cost is operational: inbound and setup are do-it-yourself across several AWS services.
SES inbound drops raw MIME in an S3 bucket and pings SNS/Lambda, and you fetch and parse the MIME yourself. MailKite POSTs one parsed JSON object — text, HTML, threading, auth, signed attachment URLs — straight to your webhook.
New SES accounts are sandboxed to verified recipients until AWS grants production access on review. With MailKite you send to anyone as soon as your domain passes DNS verification — no ticket, no wait.
Skip the receipt rule sets, IAM roles, S3 buckets, and SNS topics. Point a domain at MailKite and set one webhook URL — that's the whole setup.
No per-identity juggling in a console, unlimited domains on one quota, graceful overage, and human support on paid plans — instead of a paid AWS Support tier.
| MailKite | Amazon SES | |
|---|---|---|
| Inbound payload | Parsed JSON on your webhook | Raw MIME in S3, fetched via Lambda |
| Inbound setup | One webhook URL | Receipt rules + S3 + SNS/Lambda + IAM |
| Sandbox / production approval | None — DNS-verify and send | Sandboxed until AWS approves |
| Dashboard for inbound | Yes — logs + replay | Build it yourself |
| Per-email send price at scale | Metered, transparent | Among the lowest anywhere |
| Deliverability | SPF/DKIM/DMARC aligned | Excellent AWS IPs |
| Per-domain fees | None — unlimited domains | No fee, but per-identity setup |
| Human support | Paid plans | Paid AWS Support tier |
Competitor capabilities change — we re-audit these tables regularly. Spot something out of date? Tell us and we'll fix it.
No S3 round-trip, no SNS/Lambda glue, no MIME parser to maintain — the parsed message and signed attachment URLs arrive on your webhook.
# 1. Create a receipt rule set + rule for support@myapp.ai
# 2. Rule action: deliver raw email to an S3 bucket (+ IAM policy)
# 3. Rule action: notify an SNS topic / invoke a Lambda
# 4. In the Lambda, fetch the raw MIME object from S3:
const obj = await s3.getObject({ Bucket, Key }).promise()
const mime = obj.Body.toString("utf8")
# 5. …then parse the MIME yourself:
const mail = await simpleParser(mime) // headers, parts, attachments
handle(mail.from, mail.subject, mail.text, mail.attachments) POST /your-webhook Content-Type: application/json
x-mailkite-signature: t=…,v1=… (HMAC-SHA256 — verify locally)
{
"id": "msg_2Hk9…",
"type": "email.received",
"from": { "address": "ada@example.com" },
"to": [{ "address": "support@myapp.ai" }],
"subject": "Re: invoice #1042",
"text": "Looks good — approved!",
"html": "<p>Looks good — approved!</p>",
"threadId": "<a1b2c3@mail.example.com>",
"auth": { "spf": "pass", "dkim": "pass", "dmarc": "pass", "spam": "ham" },
"attachments": [
{ "filename": "po.pdf", "contentType": "application/pdf",
"size": 18213, "url": "https://api.mailkite.dev/att/2Hk9…/0?sig=…" }
]
} SES wins raw per-email price for pure high-volume sending. MailKite wins total cost of ownership: inbound as JSON with zero pipeline, no sandbox, unlimited domains free, and no S3/SNS/Lambda bill or engineering time to maintain.
Add our MX records (or start on a managed subdomain) and delete the SES receipt rule set, S3 bucket, SNS topic, and Lambda.
Drop the getObject + simpleParser pipeline. Read the JSON body directly: event.from.address, event.subject, event.text, event.attachments[].
Verify x-mailkite-signature locally, then send or reply through the same API — no production-access request, aligned to your own domain.
Per email sent, SES is about the cheapest there is — for pure high-volume outbound it's hard to beat. But receiving on SES adds S3, SNS, and Lambda costs plus the engineering time to build and maintain the pipeline. MailKite is free to start, includes inbound-as-JSON with no pipeline, and never charges per domain — so total cost of ownership often favors MailKite until you're sending at large scale.
Yes, in supported regions: you create receipt rules that deliver raw MIME to S3 and notify SNS/Lambda, then fetch and parse the MIME yourself. MailKite delivers the already-parsed message as JSON to your webhook — no S3, no Lambda, no MIME parser.
New SES accounts are sandboxed — you can only send to verified addresses until AWS reviews and grants production access. MailKite has no sandbox: once your domain passes DNS verification (SPF + DKIM), you can send to anyone.
The Amazon SES alternative for developers →
The long-form take on our blog — receipts, runnable code, and where we won't overclaim.
Point a domain, drop in a webhook URL, receive your first email. Unlimited domains, no credit card.