# Running Amazon SES in Production

Source: https://wraps.dev/ses

SES is cheap, reliable and almost entirely undocumented at the moment something breaks. This is the reference we keep for ourselves: the exceptions it throws, what each one actually means, and the operational limits AWS enforces on every account whether you use Wraps or not.

## Error reference

12 AWS exceptions, each with the literal string AWS returns and the fix. Remediation is adapted from the Wraps CLI's own error catalog rather than written from memory, and a test fails if the two drift apart.

### [Amazon SES error codes](https://wraps.dev/ses/errors)

Grouped by what went wrong: identity and verification, throughput and quota, account state, credentials and permissions.

-   [MessageRejected](https://wraps.dev/ses/errors/email-address-not-verified)
-   [Throttling](https://wraps.dev/ses/errors/maximum-sending-rate-exceeded)
-   [LimitExceededException](https://wraps.dev/ses/errors/daily-sending-quota-exceeded)
-   [AccountSendingPausedException](https://wraps.dev/ses/errors/account-sending-paused)
-   [ConfigurationSetDoesNotExistException](https://wraps.dev/ses/errors/configuration-set-does-not-exist)
-   [ConfigurationSetSendingPausedException](https://wraps.dev/ses/errors/configuration-set-sending-paused)
-   [MailFromDomainNotVerifiedException](https://wraps.dev/ses/errors/mail-from-domain-not-verified)
-   [InvalidClientTokenId](https://wraps.dev/ses/errors/invalid-client-token-id)
-   [SignatureDoesNotMatch](https://wraps.dev/ses/errors/signature-does-not-match)
-   [UnrecognizedClientException](https://wraps.dev/ses/errors/unrecognized-client-exception)
-   [ExpiredTokenException](https://wraps.dev/ses/errors/expired-token)
-   [AccessDeniedException](https://wraps.dev/ses/errors/access-denied)

## When something is wrong and there is no error message

The failures SES does not throw an exception for. Every percentage on these pages is quoted from AWS's own documentation and linked back to it, because the numbers move and a number without a source is not worth acting on.

### [Bounce rate](https://wraps.dev/ses/bounce-rate)

What SES actually counts, the review and pause thresholds AWS publishes, and the order to work through when the number climbs.

### [Complaint rate](https://wraps.dev/ses/complaint-rate)

Why 0.1 percent is the line, and why the rate SES shows you is lower than the rate recipients are generating.

### [Account under review or paused](https://wraps.dev/ses/account-under-review)

Two states with two different consequences. What each permits, what to put in the reply to AWS, and what makes it worse.

### [Sending limits](https://wraps.dev/ses/limits)

Sandbox quotas, the per-second rate against the rolling 24-hour cap, and how increases actually happen.

### [Mail going to spam](https://wraps.dev/ses/spam-folder)

Authentication first, then reputation, then content. In that order, because the first one is cheap to settle.

## Further reading

The depth behind the pages above: the sandbox request in full, the event pipeline behind bounce handling, and what a given volume costs.

### [Getting out of the SES sandbox](https://wraps.dev/blog/ses-sandbox-guide)

What AWS actually looks for in a production access request, and why requests get denied.

### [Production access](https://wraps.dev/docs/guides/production-access)

The request itself, step by step, with the state to check first.

### [Bounce handling](https://wraps.dev/docs/guides/bounce-handling)

Where bounce events come from and what has to happen to the address afterwards.

### [Reputation](https://wraps.dev/docs/guides/reputation)

The bounce and complaint numbers AWS enforces, and what moves them.

### [Domain verification](https://wraps.dev/docs/guides/domain-verification)

DKIM, SPF and DMARC records, and how SES decides a domain is ready.

### [Production access request builder](https://wraps.dev/tools/ses-production-access)

Six answers in, the support-case text out — or paste a denial and see which gap it names.

### [SES cost calculator](https://wraps.dev/tools/ses-calculator)

What a given volume costs at AWS pricing, with nothing added on.

## Where Wraps fits

Wraps deploys email infrastructure into your own AWS account and gives you the platform layer SES does not have: a dashboard, templates, contacts, broadcasts and an SDK. Sending runs through your SES at AWS pricing, so the limits, the reputation and the quotas on this page stay yours. That is the honest split. Wraps makes SES easier to operate and cannot override anything AWS controls.

Wraps-side error codes, as opposed to the AWS ones above, are in the [CLI error reference](https://wraps.dev/docs/reference/errors).
