Migrate from Postmark.
You already like the deliverability discipline. We borrowed the same approach — per-sender complaint cron, auto-suspend at 0.3%. What's new: typed reply events, native injection scanning, MCP-native distribution, and a separate allowance for received mail.
Send + receive, side by side.
Your Postmark send and inbound code, and the Mails.ai code that replaces it.
// Postmark — send via Server API + Inbound Stream parse
import { ServerClient } from "postmark";
const client = new ServerClient(process.env.POSTMARK_TOKEN);
await client.sendEmail({
From: "hello@yourcompany.com",
To: "user@example.com",
Subject: "Demo",
TextBody: "...",
MessageStream: "transactional",
});
// Inbound Stream webhook delivers parsed JSON — but no intent classification.
app.post("/inbound", (req, res) => {
const { From, Subject, TextBody } = req.body;
// Classify intent + extract entities yourself
});// Mails.ai — typed reply event with its injection score pre-computed
import { mails } from "@mailsai/sdk";
const agent = mails.agent("hello"); // sends from hello.yourcompany@send.mails.ai
await agent.send({ to: "user@example.com", subject: "Demo", body: "..." });
agent.onReply((event) => {
// event.injection_score => 0.02
});Introduction
Postmark and mails.ai share the same deliverability philosophy. Both suspend bad senders early. Both treat transactional email seriously. The difference is what happens when your agent reads a reply.
Jump ahead
What's the same, what's different.
Key differences
- Per-sender complaint cron. Both auto-suspend bad actors. Same philosophy.
- Transactional vs broadcast isolation. Mails.ai is pure transactional + agent inbox. We don't sell broadcast.
- Sender reputation tracking. Agent-level granularity instead of stream-level.
- Webhook structure. Mails.ai adds a classifier layer Postmark doesn't have.
- Dedicated IP. Same reputation-isolation model. Worth saying: an IP only earns standing from sustained volume, so below a few hundred thousand a month the warm shared rail beats your own cold IP.
- Big-sender pricing. Postmark goes further self-serve. Above Scale, write to support@mails.ai.
| Dimension | Postmark | Mails.ai |
|---|---|---|
| Per-sender complaint cron | Yes (Message Streams) | Yes (architectural primitive) |
| Transactional vs broadcast isolation | Message Streams | Single product (transactional only) |
| Sender reputation tracking | Per-Stream | Per-agent (one identity, many recipients) |
| Webhook structure | Inbound Stream → parsed JSON | Typed reply event with injection_ |
| Dedicated IP | $50/ | On request (Scale) |
| Big-sender pricing | Self-serve to 3M/ | Self-serve up to Scale (250,000 emails + 500,000 inbound replies) |
What you gain by moving.
Typed reply events.
Stop regexing raw inbound bodies. Every inbound arrives with injection_score and sender_reputation pre-computed, and first-contact mail with intent, entities and urgency too when you enable classification.
Native prompt-injection scanning.
Every inbound runs a six-category injection scanner before reaching your agent. No third-party tool, no DIY guardrails.
MCP-native distribution.
npx @mailsai/mcp-server drops into Claude Code, Cursor, Cline, or any MCP-compatible runtime — your agent gets mails_send / mails_list_replies tools automatically.
Self-serve signup.
No Enterprise gate. No contact-sales tier. No sales team to call. The pricing page is the price — monthly, or yearly for two months free.
Lean cost structure.
Commodity infrastructure plus a small team, and no sales org to pay for.
Dual-run on the Free tier.
Same SMTP shape on the send side; typed reply events on the inbound side. Self-serve checkout, magic-link signup, no sales call. The Free tier (3,000 emails and 3,000 inbound replies a month) covers the dual-running phase.
Give your first agent an inbox
Free covers 3,000 emails and 3,000 inbound replies a month, with no card. Upgrade when your agents get busy.
Get your API key
