# Amazon SES Error Codes: Every Exception and Its Fix

Source: https://wraps.dev/ses/errors

12 exceptions, each with the literal string AWS returns and what to do about it. The remediation on every page is adapted from the Wraps CLI's own error catalog, which has to explain these failures to people mid-command.

## Identity and verification

The request reached SES and SES refused it over what is, or is not, verified.

| AWS exception | What AWS says | Wraps code |
| --- | --- | --- |
| [MessageRejected](https://wraps.dev/ses/errors/email-address-not-verified)SMTP 554 | Email address is not verified. The following identities failed the check in region US-EAST-1: sender@example.com | `SES_MESSAGE_REJECTED` |
| [ConfigurationSetDoesNotExistException](https://wraps.dev/ses/errors/configuration-set-does-not-exist) | Configuration set <ConfigurationSetName> does not exist. | `SES_CONFIG_SET_MISSING` |
| [MailFromDomainNotVerifiedException](https://wraps.dev/ses/errors/mail-from-domain-not-verified) | Amazon SES could not read the MX record required to use the specified MAIL FROM domain. | `SES_MAIL_FROM_NOT_VERIFIED` |

## Throughput and quota

The send was well formed and you asked for more than the account is allowed right now.

| AWS exception | What AWS says | Wraps code |
| --- | --- | --- |
| [Throttling](https://wraps.dev/ses/errors/maximum-sending-rate-exceeded)SMTP 454 | Throttling: Maximum sending rate exceeded | `AWS_THROTTLED` |
| [LimitExceededException](https://wraps.dev/ses/errors/daily-sending-quota-exceeded)SMTP 454 | Daily message quota exceeded | `AWS_LIMIT_EXCEEDED` |

## Account and configuration set state

Sending is switched off, either for the whole account or for one configuration set.

| AWS exception | What AWS says | Wraps code |
| --- | --- | --- |
| [AccountSendingPausedException](https://wraps.dev/ses/errors/account-sending-paused) | Email sending is disabled for your entire Amazon SES account. | `SES_ACCOUNT_SENDING_PAUSED` |
| [ConfigurationSetSendingPausedException](https://wraps.dev/ses/errors/configuration-set-sending-paused) | Email sending is disabled for the configuration set <ConfigurationSetName>. | `SES_CONFIG_SET_SENDING_PAUSED` |

## Credentials and permissions

The request never got past authentication or authorization, so SES never saw the message.

| AWS exception | What AWS says | Wraps code |
| --- | --- | --- |
| [InvalidClientTokenId](https://wraps.dev/ses/errors/invalid-client-token-id) | The security token included in the request is invalid. | `ACCESS_KEY_INVALID` |
| [SignatureDoesNotMatch](https://wraps.dev/ses/errors/signature-does-not-match) | The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. | `ACCESS_KEY_INVALID` |
| [UnrecognizedClientException](https://wraps.dev/ses/errors/unrecognized-client-exception) | The security token included in the request is invalid. | `ACCESS_KEY_INVALID` |
| [ExpiredTokenException](https://wraps.dev/ses/errors/expired-token) | The security token included in the request is expired. | `SESSION_TOKEN_EXPIRED` |
| [AccessDeniedException](https://wraps.dev/ses/errors/access-denied) | User: arn:aws:iam::123456789012:user/dev is not authorized to perform: ses:SendEmail on resource: arn:aws:ses:us-east-1:123456789012:identity/example.com | `IAM_PERMISSION_DENIED` |

## Not the error you have

These are the AWS exceptions the Wraps CLI maps to specific guidance. Anything else it surfaces as the real AWS error code rather than guessing, because the failure mode worth avoiding is a tool that reports every unknown AWS error as a credentials problem. The Wraps-side codes are documented separately in the [CLI error reference](https://wraps.dev/docs/reference/errors).

For the operational side of SES rather than a specific exception, start at [running Amazon SES in production](https://wraps.dev/ses).
