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
// 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
// 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.
DimensionPostmarkMails.ai
Per-sender complaint cronYes (Message Streams)Yes (architectural primitive)
Transactional vs broadcast isolationMessage StreamsSingle product (transactional only)
Sender reputation trackingPer-StreamPer-agent (one identity, many recipients)
Webhook structureInbound Stream → parsed JSONTyped reply event with injection_score + sender_reputation
Dedicated IP$50/mo per IP (Pro tier)On request (Scale)
Big-sender pricingSelf-serve to 3M/mo, then contact salesSelf-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