MailKite
Get started
Solution

Turn support@ into tickets.

Route support@yourapp.com to a signed webhook and create a ticket the instant mail lands — sender, subject, body, and threadId already parsed. Reply through the same API and it threads correctly in the customer's inbox.

Why it fits

What you get

Ticket-ready payload

The parsed message — from, subject, text/HTML, threadId, attachments — arrives as JSON, so creating a ticket is a few field reads, not a MIME parser.

Replies thread correctly

Send your reply through the Send API with the message-id and In-Reply-To/References are handled — the customer sees one clean thread.

Never drop a ticket

Webhooks retry with backoff, and you can replay any message in one click if your app was down — no support email lost to a 500.

Spoofing signal built in

Every event carries SPF/DKIM/DMARC and spam results, so you can flag or drop forged 'urgent' support mail before it becomes a ticket.

How it works

Three steps to live

  1. 1

    Point support@ at MailKite

    Add MX (or use a managed subdomain) and route the support@ address — or a catch-all — to your webhook URL in the dashboard.

  2. 2

    Create a ticket on inbound

    Read event.from.address, event.subject, event.text, and event.threadId in your handler and upsert a ticket.

  3. 3

    Reply from the same API

    Send the agent's reply through /v1/send referencing the thread — it lands back in the customer's inbox, correctly threaded.

Show me

webhook handler

Verify the HMAC signature, then a ticket is a handful of field reads — no MIME parsing, no polling.

js
// POST /webhooks/mailkite
export async function POST(req) {
  const raw = await req.text();
  if (!verifyWebhook(req.headers, raw, process.env.MK_SECRET))
    return new Response("bad signature", { status: 401 });

  const evt = JSON.parse(raw);
  await tickets.create({
    from:    evt.from.address,
    subject: evt.subject,
    body:    evt.text,
    thread:  evt.threadId,   // reply to this to thread correctly
    spoofed: evt.auth.dkim !== "pass",
  });
  return new Response("ok");
}
In the box

What's included

Questions

Do I need a ticketing system already?

No — you decide what a 'ticket' is. The webhook hands you the parsed message; create a row in your database, open an issue, page someone, whatever fits. Many teams wire it into their existing helpdesk.

How do replies thread?

Send your reply through the Send API referencing the original message; MailKite sets In-Reply-To/References so the customer's mail client shows a single conversation.

What if my endpoint is down?

Deliveries retry automatically with backoff, and every message is replayable in one click from the dashboard on paid plans, so nothing is lost while you recover.

Keep reading

Ready to build?

Start free on unlimited domains — no credit card. Or browse the other solutions.