Email inboxes for AI agents: the complete guide — MailKite Beta<br>50% off your first year — founding rate for the first 1,000 customers.<br>View pricing →
Sign in · Start free
All posts<br>An AI agent that can only send email is a megaphone. An agent with a real inbox is a participant — it can receive the verification code a signup flow mailed it, read a customer’s reply, and carry a thread across days without a human relaying messages. The moment an agent needs to act on its own behalf in the real world, it needs an email address it controls: one it can send from and receive to. This guide covers why, the two ways to build it, and how the current crop of agent-email platforms actually compare.
If you want the code walkthrough end to end, give your AI agent its own email inbox is the build post. This one is the decision layer above it.
Why an agent needs a real inbox
Four things break the instant your agent has to touch email and can only send:
Verification codes. Half the useful actions on the internet — creating an account, confirming a purchase, resetting access — mail a code to an address and wait. An agent with no inbox is locked out of all of them.
Human-in-the-loop, asynchronously. Email is the one channel every human already checks. An agent that emails a person a question and receives the answer back as a parsed event can wait hours without holding a socket open.
Threads, not one-shots. Real work is a conversation: a support request, a back-and-forth with a vendor, a scheduling negotiation. That requires reading replies and answering in-thread.
A stable identity. billing-agent@yourcompany.com is an identity a recipient can trust and reply to. A throwaway address on a vendor’s domain is not.
code · human reply · thread<br>email into your agent's addr<br>MX edgeparse + authenticate<br>agentreads JSON, decides<br>reply / actSend API, in-thread
Same parsed inbound edge whether you run the model loop or MailKite runs it for you.<br>Blue = operated by MailKite
An agent inbox is a loop, not a send button: mail in as JSON, a decision, a reply back out the same verified domain.
Two architectures
There are two honest ways to run an agent inbox, and the right one depends on where you want the model loop to live.
Bring your own agent. MailKite parses inbound mail and POSTs it to your webhook as signed JSON; your code runs the model and replies through the Send API. You own the loop, the prompt, the tools, and the state. This is the flexible path — any model, any framework — and it’s the one most teams start with.
Let MailKite run it. Attach a route with action: 'agent' to an address and MailKite runs the agent’s turns for you on a durable Cloudflare Queue, with an agent_runs ledger and a transcript you can drill into. No webhook to host, no loop to babysit — you define the agent, mail drives it. This is the path when you don’t want to operate infrastructure.
Both share the same parsed inbound edge and the same threaded reply going back out, so you can start with one and move to the other without changing addresses.
What to look for
Not all “email for agents” is the same. The things that matter in production:
A real domain you control — agent@yourco.com, not a random address on a vendor’s subdomain. Recipients trust it; you keep it if you switch providers.
Inbound as clean JSON — body, headers, and attachments already separated, so the agent branches on structured data instead of parsing MIME.
Reply-in-thread — in-reply-to/message-id preserved so the agent’s answer lands in the same conversation.
Per-agent isolation — one inbox per agent, so a fleet doesn’t share a mailbox or leak context.
MCP-native tools — so an agent can send and search over the Model Context Protocol without you writing a tool wrapper.
Pricing that doesn’t punish scale — spinning up a tenth agent with its own domain shouldn’t add a bill.
The landscape, honestly
The agent-email category filled in fast. Here’s a fair read of the main options.
PlatformShapeStrong atTrade-offMailKite Inbound→webhook + Send API on your domains; bring-your-own or managed action: 'agent' runs; MCP-nativeReal domains you control, unlimited inboxes + domains free , choice of loop location, Claude Code pluginYounger than the send-first incumbentsAgentMail (YC)API-first inboxes built for agents; webhooks + websocketsAgent-first ergonomics, per-agent inboxes, two-way threadsInboxes live on its platform, not your own domain by defaultInboxAPI Full email identity for an agent — send, receive, search, replyClean “agent’s personal email” modelNewer, narrower surfaceAtomic Mail JMAP-based inboxes with MCP + AgentSkill; no domain neededZero-setup, privacy-forward, standards-basedConvenience over owning your sending domainPostmark Excellent send + structured inbound parseReliability, deliverability, clean inbound JSONNot agent-shaped; no managed agent runs; per-domain cost<br>The pattern: the send-first incumbents (Postmark, and the others we compare) give you solid pipes...