Tag
#inbound
16 posts tagged “inbound”.
- 15 min read
Email to Slack: threading, Block Kit limits, and the duplicate-post trap
Slack's own email-to-channel needs a paid plan, pins every message to one fixed channel, and can't thread. Wiring inbound email to Slack yourself is about 50 lines — but three things bite once real mail arrives: Slack rejects any header block over 150 characters, webhook retries post the same email twice, and Incoming Webhooks never return a message ts, so an email thread can never become a Slack thread. Here's the handler that survives all three, and the return path that lets your team reply to the customer from inside the Slack thread.
- 6 min read
Email parser API: parse inbound email to JSON with a webhook
An email parser API that turns inbound email into structured JSON — no templates, no IMAP, no MIME parsing. Point your MX at MailKite and get a signed webhook with the full message payload.
- 2 min read
Parse inbound email to JSON in Node.js
Receive email as a webhook in Node.js: set up MailKite, verify the HMAC signature, parse the JSON payload, and handle attachments. Complete tutorial with working Express code.
- 2 min read
Receive email as a webhook in Python
Build a Python webhook handler that receives inbound email from MailKite: Flask setup, HMAC signature verification, JSON payload parsing, and attachment handling. Complete tutorial.
- 7 min read
Email inboxes for AI agents: the complete guide
Why an autonomous agent needs a real inbox — to receive verification codes, hold email threads, and act as a participant instead of a script. The two architectures (bring-your-own loop vs. managed runs), an honest look at AgentMail, InboxAPI, Atomic Mail, and Postmark, and how MailKite gives every agent a real address on a domain you control, free.
- 7 min read
Email to webhook: the complete guide to receiving email as JSON
Point your domain's MX at MailKite and every message becomes a signed JSON POST to your endpoint — no mail server, no IMAP polling, no MIME parsing. The full payload shape, signature verification, working receivers in Node, Python, Go, and PHP, and how it compares to SendGrid Inbound Parse, Mailgun Routes, and Postmark.
- 9 min read
Programmable email: send and receive mail from code (run it in your browser)
Programmable email means driving mail entirely from code — send with one API call, receive every message as JSON on a webhook, and give any app or agent its own inbox. Here's a live demo you can run right now: verify your email and send yourself a real, parsed message in about ten seconds, no signup form.
- 11 min read
Email you set up once and reuse for every project
If you ship a lot of small things, email shouldn't be a from-scratch chore each time: new account, verify domain, request production access, wire a parser. This is the setup you do once — one account, one API key — and what each new project costs after that: point a domain, reuse the key, drop in one webhook. With a reusable Node module and a single inbound handler that fans out to every project you run. For developers who launch many apps a year.
- 15 min read
I wrote the same email parser three times, and the hard part was making them fail identically
@mailkite/mail-parse parses MIME in Node, Python, and Go. Getting all three to parse a good email the same way is the easy part; getting them to break the same way on the same malformed one, and emit a byte-identical FNV-1a fingerprint when they do, is the real work. How we proved it, with two lessons that transfer to any polyglot library.
- 14 min read
The Mailgun Routes alternative for developers
Mailgun Routes is a filter-expression engine for inbound mail: match_recipient rules fire forward() and store() actions, and the parsed message arrives as form-encoded fields you decode and verify. MailKite (which we build) drops the rule DSL: point an address or catch-all at a webhook and the message arrives as one JSON payload with decoded text/html, SPF/DKIM/DMARC results, and signed attachment URLs. A fair comparison with working code for both sides.
- 15 min read
Give your AI agent its own email inbox
Give an AI agent a real, scoped address on a domain you control. Inbound mail arrives as parsed JSON to an event.received loop and the agent replies over the Send API, or MailKite runs the agent for you on a route with action: agent. Working code, the security caveat, and the honest DIY alternatives.
- 12 min read
Build a support inbox in Next.js (email in, tickets out)
Point support@yourdomain at MailKite, parse the inbound email to JSON, and POST it to a Next.js App Router Route Handler. Verify the signature against the raw body, create a ticket, and auto-reply. The whole loop, in working code.
- 14 min read
The honest SendGrid Inbound Parse alternative
SendGrid Inbound Parse POSTs inbound mail to your endpoint as multipart/form-data: a headers blob, body text, attachment file parts, and a charsets map you must honor to re-decode each field to UTF-8. MailKite (which we build) delivers the same mail as one JSON webhook with decoded text/html, an auth{spf,dkim,dmarc,spam} object, and attachments as short-lived signed URLs. A fair comparison with working code for both sides.
- 14 min read
Handling email attachments without losing the £ sign
Received email attachments arrive as inline base64 that bloats every webhook, and a charset mismatch turns £ into £. Here's why it happens, how SendGrid Inbound Parse, Cloudflare Email Routing, and self-hosting each leave the decode to you, and what a parsed attachments[] array of signed URLs looks like instead, with runnable Node code.
- 15 min read
Reply-by-email: handling inbound replies in your app
When users reply to your notification emails, capture the reply, thread it to the right conversation with threadId, and respond: either an inline ack or a real outbound message. Working Node code, honest DIY path.
- 14 min read
Receiving email is the part nobody warns you about
Sending email is a solved problem. Receiving it, turning real-world MIME into something your app can use, is where everyone quietly loses a week. Why inbound is the hard direction, how each option punts, and what one clean webhook looks like instead.