MailKite
Get started
Alternative to Resend

Inbound as a first-class citizen — not an add-on to a send API.

Resend is a beautifully built sending platform that added receiving in 2025. MailKite is inbound-first: the full parsed message arrives in the webhook itself, domains are unlimited and free rather than one-on-the-free-tier, and you get an open-source webmail component and a Claude Code plugin on top.

A fair take on Resend

Resend has arguably the best developer experience in transactional sending, and adding inbound was its most-requested feature — it now receives. The distinction is design center: sending-first with inbound added, versus inbound-first by design.

Why teams switch

What MailKite does differently

The full message in the webhook

MailKite POSTs the parsed text, HTML, headers, threading, and signed attachment URLs in the inbound event — no follow-up API call to fetch the body.

Unlimited domains, free

Run every product and client domain on the free plan. No one-domain free tier — add as many as you like at no cost.

Open-source, framework-native webmail

@mailkite/mail (MIT) gives you a drop-in inbox UI — a credibility and product surface beyond the API.

MCP-native + Claude Code plugin

A hosted MCP server and Claude Code plugin, so agents and AI tools can drive email directly.

Side by side

MailKite vs Resend

MailKite Resend
Send API + DX Clean SDKs, 8 languages Excellent send DX
Inbound design center Inbound-first Sending-first, inbound added
Full body in webhook Yes — no second call Fetch/parse patterns vary
Domains on free tier Unlimited Limited on free tier
OSS webmail component @mailkite/mail (MIT) None
MCP + Claude Code plugin Yes Varies
Graceful overage Metered, no hard cut Plan limits

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

MailKite ships the whole parsed message in the webhook — body, threading, auth, and signed attachment URLs — so there's no second round-trip to read what arrived.

Sending-first inbound (often a two-step fetch)
http
// Inbound event notifies you a message arrived…
{
  "type": "email.received",
  "data": { "email_id": "…", "from": "ada@example.com", "subject": "…" }
}

// …then you call the API again to fetch the body/attachments:
const msg = await client.emails.get(event.data.email_id)
// parse msg.text / msg.html / attachments here
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)
  • Unlimited domains on every plan
  • Pro $20/mo → 50,000, graceful overage

Resend

  • Free tier limited on domains + daily volume
  • Pro tiers scale on monthly volume
  • Inbound receiving available

Both are developer-first. If you run many domains or lead with inbound, MailKite's unlimited-domains free tier and full-message webhook are the differentiators.

See full MailKite pricing →

Switch in an afternoon

Moving from Resend

  1. 1

    Point MX at MailKite

    Add our MX records or start on a managed subdomain — all your domains included free.

  2. 2

    Consume the full inbound event

    Read event.text, event.html, event.threadId, event.attachments[] directly — no follow-up fetch by message id.

  3. 3

    Keep or move sending

    Verify the HMAC signature. Send through MailKite's API to share one quota, or keep sending on Resend and use MailKite just for inbound.

Questions

Resend receives email now — what's different?

Capability-wise both receive. MailKite is inbound-first: the full parsed message is in the webhook (no second API call), domains are unlimited on the free tier, and you get an OSS webmail component. Resend's edge is its polished sending DX.

Is MailKite's sending as nice as Resend's?

MailKite ships clean SDKs across eight languages plus a CLI, MCP, and a Claude Code plugin. Resend set a high bar for send DX; MailKite's advantage is treating send and receive as one inbound-first platform with unlimited free domains.

Can I use MailKite for inbound and Resend for sending?

Yes. Point MX at MailKite for receiving and keep sending wherever you like — or consolidate onto one shared quota later.

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

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