Amazon SES alternative · receiving email

An Amazon SES Alternative for Receiving Email

Amazon SES hands you raw MIME files in an S3 bucket and leaves the rest to you. CloudMailin delivers each message to your application as parsed JSON over HTTP, with attachments handled and every delivery recorded in a history you can search.

Setup is an address and a webhook Run both side by side while you test Keep archiving raw messages to your own bucket

Receiving with SES

SES receipt rule S3 bucket SNS/Lambda your MIME parser retry handling your app

Receiving with CloudMailin

CloudMailin address parsed JSON POST your app

The difference that matters

A history you can search, and delivery you can see

SES keeps no message history of its own and has no console for browsing individual messages. Receiving offers aggregate CloudWatch metrics, so when a message goes missing you are searching S3 keys and Lambda logs to work out what happened.

CloudMailin keeps every message and its delivery status in a searchable dashboard. Each HTTP POST to your application is recorded with the status your server returned, so a failing endpoint is visible immediately rather than surfacing later as missing data.

cloudmailin.com/messages
from:acme.com invoice
Time Message Status
09:41 support@acme.com Re: March invoice 200 OK
09:38 alerts@statuspage.io Incident resolved 200 OK
09:31 jenny@customer.co Fwd: signed contract 504 · retrying
attempt 1 · 09:31 · 504 Gateway Timeout
attempt 2 · 09:36 · 200 OK
09:24 billing@acme.com Receipt #8841 200 OK

The pipeline you build

What receiving with SES involves

SES email receiving is capable infrastructure, and at very large volumes it is hard to argue with. It is also a toolkit rather than a finished pipeline. The AWS documentation says it plainly: SES "delivers you the raw, unmodified email in MIME format". To get from there to a parsed message in your application, you typically build and operate:

01

A receipt rule set delivering messages to an S3 bucket. The SNS path is capped at 150KB per message, so real-world email needs the bucket.

02

A Lambda function triggered for each new message.

03

MIME parsing inside that function: multipart trees, base64 and quoted-printable decoding, character sets and attachment extraction.

04

Handling for the spam and virus verdict headers, because SES records verdicts but takes no action on them.

05

Retry and failure handling for the POST to your application.

06

Lifecycle rules for the bucket, since SES keeps no message history of its own and has no console for browsing individual messages.

Each piece is reasonable on its own. Together they are a small internal product that someone on your team owns forever.

The same job

The same job with CloudMailin

  • Create an address. It can receive immediately, before any DNS changes.

  • Add a webhook handler. Each message arrives as an HTTP POST, already parsed.

  • Point MX records at CloudMailin only when you want mail on your own domain.

CloudMailin handler
app.post('/incoming_mails', (req, res) => {
  const { envelope, headers, plain, html, attachments } = req.body;
  res.sendStatus(200);
});

Plus you get all of this

Instant Setup

Receiving in minutes

Choose Your Format

JSON, multipart or raw

Searchable History

Per-message delivery status

S3 / Azure / GCS

Messages + attachments in your bucket

Custom Domains

Catch-all on your own domain

Spam Scoring

Optional, per address

Side by side

Amazon SES vs CloudMailin for receiving email

Amazon SES receiving CloudMailin
What your app receives Raw MIME file in S3 Parsed JSON or multipart over HTTP
Parsing Build your own with Lambda and a MIME library Included
Delivery to your app Build your own HTTP POST with retries and recorded status
Spam handling Verdict headers only, no action taken Optional scoring per address
Message history and search None, aggregate CloudWatch metrics only Included
Attachments Inside the raw MIME Parsed, or written to your own bucket
Setup Rule sets, IAM, S3, SNS or Lambda, plus code An address and a webhook. MX records optional

SES details from the AWS documentation: email receiving concepts, receipt rule actions. Checked July 2026. Tell us if anything is out of date.

Where SES makes sense

If you send tens of millions of messages a month, run everything on AWS and have the engineering time to own a receiving pipeline, SES can make sense. Its per-message cost is genuinely low until you factor in the hours spent building that pipeline and debugging it when a message goes missing. AWS also moved SES to a new pricing model in July 2026, so if you are evaluating it, check the current plans rather than an older comparison.

Convinced? Try CloudMailin

Create an address and receive your first message before you touch DNS.

Migration

Moving over

01

Create a CloudMailin address and pick a format. It can receive immediately, before any DNS changes.

02

Add your webhook handler. The parsing, decoding and retry logic from your Lambda pipeline is no longer needed.

03

If you archive raw messages in S3 today, keep doing so. CloudMailin can deliver messages and attachments to your own bucket.

04

Point MX records at CloudMailin. Both setups can run side by side on different subdomains while you test.

Support

Support from the people who run the service

With CloudMailin our engineers also run support. They have in-depth knowledge of the whole platform, so when something looks wrong you talk to someone who can see both ends of the problem. There is a phone number you can actually call, and support is part of the service rather than a paid add-on.

Answered by engineers A phone you can call Public status page

Questions

Frequently asked questions

01 Do I still need S3, SNS and Lambda? +
No. Each message arrives at your webhook already parsed. You can start on a CloudMailin address with no DNS changes at all, then point MX records at us when you want mail on your own domain. If you want raw copies in S3 you can keep them. CloudMailin can write messages and attachments directly to your own bucket.
02 What does SES actually deliver today? +
The AWS documentation says SES "delivers you the raw, unmodified email in MIME format". Parsing multipart trees, decoding base64 and quoted-printable parts and extracting attachments is your code's job, usually in a Lambda function.
03 Is there a message history? +
SES keeps no message history and has no console for browsing individual messages. CloudMailin shows every message and its delivery status in a searchable dashboard, including the HTTP status your server returned for each attempt.
04 What about spam filtering? +
SES records spam and virus verdicts in headers but takes no action on them. With CloudMailin, spam scoring is optional. You can enable it for each address that needs it.
05 Can we migrate gradually? +
Yes. Both setups can run side by side on different subdomains. Point one subdomain at CloudMailin, test, then move the rest when you are ready.

Ready to switch?

Create an address and receive your first message as JSON in minutes, no DNS changes needed.