Migrate from Amazon SES.

SES sends, and everything around the send is yours to build. Swap the nested SES request for three flat fields, and let typed reply events replace the receipt rule, the SNS topic and the Lambda that parses your inbound.

Send + receive, side by side.

Your Amazon SES send and inbound code, and the Mails.ai code that replaces it.

Amazon SES
// Amazon SES — send with the AWS SDK v3, receive through a receipt rule
import { SESv2Client, SendEmailCommand } from "@aws-sdk/client-sesv2";
const ses = new SESv2Client({ region: "us-east-1" });

await ses.send(new SendEmailCommand({
  FromEmailAddress: "hello@yourcompany.com",
  Destination: { ToAddresses: ["user@example.com"] },
  Content: {
    Simple: {
      Subject: { Data: "Demo" },
      Body: { Text: { Data: "..." } },
    },
  },
}));

// Inbound: the receipt rule publishes to SNS (encoding BASE64); a Lambda reads it
export const handler = async (event) => {
  const note = JSON.parse(event.Records[0].Sns.Message);
  const mime = Buffer.from(note.content, "base64").toString("utf8");
  // Parse the MIME, classify intent + extract entities yourself
};
Mails.ai
// Mails.ai — flat fields on send, a typed reply event on receive
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 / sender_reputation
});

Introduction

Amazon SES is raw infrastructure, and at $0.10 per 1,000 emails it is one of the cheapest ways to send at volume. You verify identities, write IAM policies, ask AWS for production access and build the inbound side yourself. Mails.ai is the layer an agent needs on top of sending, already built.

Jump ahead

Four reasons.

Typed reply events instead of raw MIME

SES receiving runs a receipt rule that hands the raw message to SNS, S3 or Lambda, and parsing it is on you. Mails.ai delivers each reply as a typed event with its injection_score and sender_reputation set; first-contact mail also gets intent, entities and urgency once you turn classification on.

Prompt-injection scanning on every inbound

Every inbound runs a six-category injection scanner before your agent reads it, and high-risk mail is flagged quarantined so your agent can skip it. SES has no equivalent: an agent reading raw inbound defends itself.

Reputation handled at send time

Per-agent reputation scoring, suppression of known-bad recipients at send time and a pause at a 0.3% complaint rate come built in. On SES you wire configuration sets and SNS bounce and complaint topics, then act on them yourself.

No sandbox to leave

SES starts every account in a sandbox until AWS grants production access. Mails.ai sends from signup with no approval queue, and a new workspace's daily limit on different recipients rises as the account ages.

What maps to what.

Key differences

  • Sending. Flat fields: to, subject and body, with agent naming the sender. SES nests them in Destination and Content.
  • Inbound. One JSON event per reply, scanned and scored before it reaches you. No MIME to parse.
  • Reputation. Suppression at send time and a pause at a 0.3% complaint rate, with nothing to wire.
  • Domains. Paid plans send from your own domain: we return the DKIM, SPF and DMARC records to add at your registrar. Custom-domain sends cannot yet reach Outlook and Hotmail recipients.
  • Access. A key covers the whole workspace, unless it is minted for one agent.
  • Sandbox. Sending starts at signup. Every send is classified before it leaves, and cold outreach is refused.
NameAmazon SESMails.ai
SendingSendEmailCommand (SES API v2)POST /v1/messages
InboundReceipt rule to SNS, S3 or LambdaTyped webhook + GET /v1/events
ReputationConfiguration sets, bounce and complaint topicsPer-agent reputation
DomainsVerified identity + DKIMDomain verification in the dashboard
AccessIAM user + access keysWorkspace API key
SandboxSandbox + production access request(none)

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