MailKite
Get started
Alternative to Amazon SES

SES-grade email without the S3-SNS-Lambda pipeline or the sandbox.

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.

A fair take on Amazon SES

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.

Why teams switch

What MailKite does differently

Inbound as clean JSON — no AWS pipeline

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.

No sandbox gauntlet

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.

No IAM, receipt rules, or buckets

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.

Unlimited domains free + human support

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.

Side by side

MailKite vs Amazon SES

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.

Show the payload

What actually hits your webhook

No S3 round-trip, no SNS/Lambda glue, no MIME parser to maintain — the parsed message and signed attachment URLs arrive on your webhook.

SES inbound (receipt rule → S3 → Lambda → parse MIME)
http
# 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)
MailKite
json
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=…" }
  ]
}
The price advantage

Unlimited domains. One quota. Free to start.

MailKite

  • Free: 3,000 emails/mo (in + out combined)
  • Unlimited domains, no AWS services to run
  • Pro $20/mo → 50,000, then $0.50/1k — no hard cut

Amazon SES

  • ~$0.10 / 1,000 emails sent — very cheap
  • Inbound = S3 + SNS/Lambda costs + your eng time
  • Sandbox until AWS grants production access

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.

See full MailKite pricing →

Switch in an afternoon

Moving from Amazon SES

  1. 1

    Point MX at MailKite

    Add our MX records (or start on a managed subdomain) and delete the SES receipt rule set, S3 bucket, SNS topic, and Lambda.

  2. 2

    Replace the S3/MIME code

    Drop the getObject + simpleParser pipeline. Read the JSON body directly: event.from.address, event.subject, event.text, event.attachments[].

  3. 3

    Send without the sandbox

    Verify x-mailkite-signature locally, then send or reply through the same API — no production-access request, aligned to your own domain.

Questions

Isn't SES much cheaper?

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.

Can SES actually receive email?

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.

What is the SES sandbox and does MailKite have one?

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.

Go deeper

The Amazon SES alternative for developers →

The long-form take on our blog — receipts, runnable code, and where we won't overclaim.

Try MailKite free — keep Amazon SES running until you're ready.

Point a domain, drop in a webhook URL, receive your first email. Unlimited domains, no credit card.