SES Sandbox Mode: Por Que Você Só Consegue Enviar E-mails para Si Mesmo e Como Sair Disso

Você configurou o Amazon SES, verificou seu domínio, testou o envio para o seu próprio endereço e tudo funcionou perfeitamente — mas quando tentou disparar e-mails para os seus clientes reais, a requisição foi bloqueada. Isso é o SES Sandbox Mode, uma restrição padrão que toda conta AWS nova enfrenta antes de solicitar acesso à produção.

TL;DR — SES Sandbox Mode

AspectoSandboxProdução
Destinatários permitidosSomente endereços verificadosQualquer endereço
Limite de envio diário200 e-mails/diaConforme solicitado
Taxa máxima de envio1 e-mail/segundoConforme solicitado
Como sairSolicitar via Service Quotas ou console SES

Limites exatos podem variar. Sempre consulte a documentação oficial do SES.

Como o SES Sandbox Funciona na Prática

O Amazon SES coloca todas as contas novas em modo Sandbox automaticamente. A lógica é simples: a AWS precisa proteger a reputação dos IPs compartilhados do serviço contra spammers que criam contas novas para disparar campanhas abusivas. Enquanto você está no Sandbox, o SES age como um filtro rígido — qualquer tentativa de enviar para um endereço não verificado retorna um erro imediato.

graph TD A["Conta AWS Criada"] --> B["SES Sandbox Ativo
por padrão"] B --> C["Verificar Identidade
Domínio ou E-mail"] C --> D{"Destinatário
verificado?"} D -- Sim --> E["Envio permitido
no Sandbox"] D -- Não --> F["MessageRejected
erro retornado"] C --> G["Configurar Bounce
e Complaint via SNS"] G --> H["Solicitar Acesso
à Produção"] H --> I{"AWS aprova?"} I -- Sim --> J["Produção Liberada
Qualquer destinatário"] I -- Não --> K["Responder ticket
com mais detalhes"] K --> H
  1. Conta nova criada: toda conta AWS começa no Sandbox automaticamente, sem exceção.
  2. Verificação de identidade: você precisa verificar o domínio remetente ou o endereço de e-mail antes de qualquer envio.
  3. Sandbox — envio restrito: apenas destinatários previamente verificados na sua conta aceitam e-mails.
  4. Solicitação de produção: você submete um caso de suporte com justificativa de uso.
  5. Produção liberada: após aprovação, os limites de envio aumentam e qualquer destinatário é permitido.
Pense no Sandbox como um ambiente de quarentena de reputação. A AWS não sabe nada sobre você ainda — se vai enviar newsletters legítimas ou spam em massa. O Sandbox é o período de observação antes de confiar a você acesso irrestrito à infraestrutura de e-mail deles.

Pré-requisitos: Verificar Identidade Remetente no SES

Antes de qualquer envio — mesmo no Sandbox — você precisa verificar a identidade do remetente. O SES suporta verificação de domínio completo (recomendado para produção) ou de endereço de e-mail individual. A verificação de domínio via DKIM é o caminho correto para ambientes produtivos porque cobre todos os endereços daquele domínio e melhora a entregabilidade.

Verificar um Domínio com DKIM

# Criar identidade de domínio e obter registros DKIM para publicar no DNS
aws sesv2 create-email-identity \
  --email-identity exemplo.com.br \
  --dkim-signing-attributes SigningAttributesOrigin=AWS_SES \
  --region us-east-1

O retorno inclui os três registros CNAME que você precisa publicar no DNS do domínio. O SES verifica automaticamente a presença desses registros e ativa a identidade quando encontrá-los.

Verificar um Endereço de E-mail Individual

# Verificar um endereço de e-mail específico (útil para testes no Sandbox)
aws sesv2 create-email-identity \
  --email-identity contato@exemplo.com.br \
  --region us-east-1

O SES envia um e-mail de confirmação para o endereço informado. O destinatário precisa clicar no link para completar a verificação. No Sandbox, tanto o remetente quanto o destinatário precisam ser identidades verificadas na sua conta.

Confirmar Status da Verificação

aws sesv2 get-email-identity \
  --email-identity exemplo.com.br \
  --region us-east-1

Configurar Notificações de Bounce e Complaint — Obrigatório Antes de Solicitar Produção

A AWS avalia a maturidade operacional da sua configuração antes de aprovar a saída do Sandbox. Uma conta que não monitora bounces e complaints sinaliza risco — se você não sabe quando e-mails estão falhando ou sendo marcados como spam, não tem como manter a reputação do remetente. Configurar essas notificações via SNS é o passo que separa uma solicitação aprovada de uma rejeitada.

Criar Tópico SNS para Notificações

aws sns create-topic \
  --name ses-notifications \
  --region us-east-1

Criar Configuration Set

O configuration set é o mecanismo que associa eventos de envio (bounce, complaint, delivery) a destinos de notificação.

aws sesv2 create-configuration-set \
  --configuration-set-name default \
  --region us-east-1

Associar SNS ao Configuration Set

aws sesv2 create-configuration-set-event-destination \
  --configuration-set-name default \
  --event-destination-name bounce-complaint-destination \
  --event-destination '{"Enabled": true, "MatchingEventTypes": ["BOUNCE", "COMPLAINT", "DELIVERY"], "SnsDestination": {"TopicArn": "arn:aws:sns:us-east-1:123456789012:ses-notifications"}}' \
  --region us-east-1

Desativar Encaminhamento de E-mail para Feedback (Recomendado)

Por padrão, o SES encaminha notificações de bounce e complaint por e-mail. Quando você tem o SNS configurado, esse encaminhamento é redundante e pode gerar ruído. Desative-o explicitamente:

aws sesv2 put-email-identity-feedback-attributes \
  --email-identity exemplo.com.br \
  --no-email-forwarding-enabled \
  --region us-east-1

Política IAM Necessária para Essa Configuração

🔽 Clique para expandir a política IAM
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SESIdentityManagement",
      "Effect": "Allow",
      "Action": [
        "sesv2:CreateEmailIdentity",
        "sesv2:GetEmailIdentity",
        "sesv2:PutEmailIdentityFeedbackAttributes",
        "sesv2:PutEmailIdentityDkimAttributes",
        "sesv2:CreateConfigurationSet",
        "sesv2:CreateConfigurationSetEventDestination",
        "sesv2:SendEmail"
      ],
      "Resource": "*"
    },
    {
      "Sid": "SNSTopicManagement",
      "Effect": "Allow",
      "Action": [
        "sns:CreateTopic",
        "sns:SetTopicAttributes",
        "sns:AddPermission",
        "sns:GetTopicAttributes"
      ],
      "Resource": "arn:aws:sns:us-east-1:123456789012:ses-notifications"
    }
  ]
}

Como Solicitar a Saída do SES Sandbox — Passo a Passo

A solicitação de saída do Sandbox é feita via AWS Service Quotas ou diretamente pelo console do SES. O caminho pelo Service Quotas é o mais direto e permite acompanhar o status da solicitação programaticamente.

Opção 1: Via Console do SES (Recomendado para Primeira Solicitação)

  1. Acesse o console do Amazon SES na região onde você opera.
  2. No menu lateral, clique em Account dashboard.
  3. Localize o painel Sending limits e clique em Request production access.
  4. Preencha o formulário com: tipo de e-mail (transacional ou marketing), URL do site, processo de opt-in, e como você lida com bounces e complaints.
  5. Submeta. O tempo de resposta típico é de 24 horas, mas pode variar.

Opção 2: Via AWS Service Quotas (CLI)

aws service-quotas request-service-quota-increase \
  --service-code ses \
  --quota-code L-804C8AE8 \
  --desired-value 50000 \
  --region us-east-1

O código de quota L-804C8AE8 corresponde ao limite de envio diário do SES. Verifique os códigos disponíveis para sua região em Manage sending quotas.

O Que Escrever no Formulário de Solicitação

A AWS rejeita solicitações vagas. A equipe de revisão quer entender o seu caso de uso concreto. Uma solicitação bem escrita responde diretamente a três perguntas:

  • Quem são os destinatários? — Clientes que se cadastraram voluntariamente na sua plataforma via formulário de opt-in explícito.
  • Que tipo de e-mail você envia? — E-mails transacionais (confirmações de pedido, redefinição de senha) ou campanhas de marketing com link de descadastro.
  • Como você trata bounces e complaints? — Notificações via SNS configuradas, supressão automática de endereços com bounce permanente, monitoramento de taxa de complaint.
graph LR A["Solicitação
Submetida"] --> B["Revisão AWS
24-48h típico"] B --> C{"Decisão"} C -- Aprovado --> D["Produção Ativa
Limites aumentados"] C -- Rejeitado --> E["Perguntas adicionais
no ticket"] E --> F["Responder com
detalhes do caso de uso"] F --> B
  1. Solicitação submetida: você envia o formulário com justificativa de uso.
  2. Revisão AWS: a equipe avalia o caso de uso, configuração de feedback e histórico da conta.
  3. Aprovado: limites aumentados, qualquer destinatário liberado — fluxo normal de produção.
  4. Rejeitado: a AWS retorna com perguntas adicionais ou solicita ajustes. Responda diretamente no ticket com informações complementares e resubmeta.

Monitoramento de Reputação Após Sair do Sandbox

Sair do Sandbox não é o fim do processo — é o começo da responsabilidade. A AWS pode colocar sua conta em probation ou suspender o envio se as taxas de bounce e complaint ultrapassarem os limites aceitáveis. Monitorar essas métricas continuamente é o que mantém sua conta em produção.

As métricas de reputação estão disponíveis em dois lugares:

  • Console do SES → Reputation metrics: exibe as taxas de bounce e complaint calculadas pelo SES para a sua conta, com indicadores visuais de saúde.
  • Amazon CloudWatch, namespace AWS/SES: métricas como Reputation.BounceRate e Reputation.ComplaintRate estão disponíveis para criação de alarmes automatizados.

Criar Alarme de Taxa de Complaint no CloudWatch

aws cloudwatch put-metric-alarm \
  --alarm-name ses-complaint-rate-high \
  --alarm-description 'Taxa de complaint SES acima do limite seguro' \
  --metric-name Reputation.ComplaintRate \
  --namespace AWS/SES \
  --statistic Average \
  --period 86400 \
  --threshold 0.001 \
  --comparison-operator GreaterThanOrEqualToThreshold \
  --evaluation-periods 1 \
  --alarm-actions arn:aws:sns:us-east-1:123456789012:ses-notifications \
  --region us-east-1

Diagnóstico: Erro Comum ao Tentar Enviar Fora do Sandbox

O erro que você vê quando tenta enviar para um destinatário não verificado enquanto ainda está no Sandbox é direto:

An error occurred (MessageRejected) when calling the SendEmail operation:
Email address is not verified. The following identities failed the check in region US-EAST-1:
destinatario@cliente.com

A primeira reação de muitos engenheiros é verificar a configuração DKIM ou a política IAM — ambas estão corretas. O problema não é de permissão nem de autenticação. É de restrição de ambiente. Enquanto a conta estiver no Sandbox, o SES rejeita qualquer destinatário que não seja uma identidade verificada naquela conta, independentemente de qualquer outra configuração.

Para confirmar que sua conta ainda está no Sandbox:

aws sesv2 get-account \
  --region us-east-1

Procure o campo ProductionAccessEnabled no retorno. Se o valor for false, você ainda está no Sandbox.

Próximos Passos e Recursos Adicionais

Com a conta fora do Sandbox e as notificações de bounce e complaint configuradas, o próximo passo operacional é implementar uma lista de supressão para evitar reenvios para endereços com bounce permanente — o SES mantém uma lista de supressão no nível da conta que pode ser gerenciada via sesv2 put-suppressed-destination. Para campanhas de marketing, considere também configurar um IP dedicado se o volume de envio justificar o custo de isolamento de reputação.

Glossário — Termos-Chave do SES Sandbox

TermoDefinição
Sandbox ModeEstado padrão de contas SES novas. Restringe envios a identidades verificadas e aplica limites baixos de volume.
Identidade VerificadaDomínio ou endereço de e-mail confirmado pelo SES via DNS (DKIM/DMARC) ou link de verificação.
Bounce RatePercentual de e-mails enviados que não foram entregues. Taxas altas indicam listas de e-mail de baixa qualidade.
Complaint RatePercentual de destinatários que marcaram o e-mail como spam. Métrica crítica para manutenção da conta em produção.
Configuration SetConjunto de regras do SES que define para onde eventos de envio (bounce, delivery, complaint) são roteados.

Comentários

Postagens mais visitadas deste blog

Variáveis de Ambiente no Lambda: Configuração, Acesso e Criptografia com KMS

Monitoramento de Memória RAM no EC2: Por que o CloudWatch Agent é Obrigatório

S3 Access Denied: Por que 'Bloquear Acesso Público' impede seu objeto mesmo após torná-lo público