MailKite
Get started
Alternative to CloudMailin

The same inbound-to-JSON job — with sending built in and unlimited domains free.

CloudMailin turns incoming email into an HTTP POST — a job it has done reliably for over a decade. MailKite does the same thing with a modern JSON webhook, adds a first-class send API so you can reply from the same platform, and never charges per domain.

A fair take on CloudMailin

CloudMailin pioneered inbound-email-to-HTTP and is genuinely dependable at it — if all you need is a battle-tested inbound POST, it works.

Why teams switch

What MailKite does differently

One API for receive and send

Parse an incoming email and reply to it with the same account and SDK. CloudMailin is inbound-first; MailKite treats send and receive as one platform with a shared quota.

Unlimited domains, free

Run every product, every client, and every alias from one account at no per-domain cost. You never pick which domains are 'worth' paying for.

Clean, signed JSON

A modern JSON payload with parsed text, HTML, threading, auth results, and signed attachment URLs — plus an HMAC signature you verify locally, no callback.

Graceful overage

Cross your quota and we meter it gently — never a hard cutoff mid-flow. On Free we soft-pause with notice.

Side by side

MailKite vs CloudMailin

MailKite CloudMailin
Inbound → JSON webhook Yes — full parsed message Yes — its core product
Send / reply from same API Yes — one platform, one quota Inbound-focused; sending is secondary
Per-domain fees None — unlimited domains Address/volume-based plans
HMAC-signed webhooks Yes, every plan Signature/basic-auth options
One-click webhook replay Yes (paid) Limited
Zero-retention passthrough Per-domain toggle Not offered
OSS webmail component @mailkite/mail (MIT) None
MCP server + Claude Code plugin Yes None

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

One JSON object with parsed body, threading, auth results, and signed attachment URLs — instead of prising fields out of a multipart form.

Typical inbound-parser payload
http
POST /your-webhook
Content-Type: multipart/form-data; boundary=…

--…
Content-Disposition: form-data; name="plain"

Looks good — approved!
--…
Content-Disposition: form-data; name="headers[Subject]"

Re: invoice #1042
--…    (attachments as multipart file parts,
        headers split across many form fields)
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 on every plan
  • Pro $20/mo → 50,000, then $0.50/1k — no hard cut

CloudMailin

  • Volume/address-based tiers
  • Inbound is the paid product
  • Sending is a separate concern

MailKite counts inbound and outbound against one quota, and never bills per domain — so shipping ten products costs the same as shipping one.

See full MailKite pricing →

Switch in an afternoon

Moving from CloudMailin

  1. 1

    Point your MX (or use a managed subdomain)

    Add the MailKite MX records to your domain — or start instantly on a managed subdomain while DNS propagates. No Cloudflare-only requirement.

  2. 2

    Swap the webhook URL

    Set your endpoint in the dashboard. Read event.from.address, event.subject, event.text — no multipart parsing to port.

  3. 3

    Verify the signature and ship

    Check the x-mailkite-signature header with the SDK's verifyWebhook helper and you're live — replies go out through the same send API.

Questions

Is MailKite a drop-in CloudMailin replacement?

For the inbound-to-webhook job, effectively yes — you repoint MX and swap the webhook URL. The payload is JSON instead of multipart, so most integrations get simpler, not harder.

Can I also send email with MailKite?

Yes. Sending is a first-class part of the same API and shares your monthly quota — reply to an inbound message or send transactional mail from your own SPF/DKIM-aligned domain.

Do I really pay nothing for extra domains?

Correct. Domains are unlimited and free on every plan, including Free. You only pay once combined inbound + outbound volume crosses your tier.

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

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