Skip to content

Amazon SES Sending Limits — Cookbook for AcelleMail Operators

SES starts at 200/day sandbox, scales to 50k+/day in production, $0.10 per 1,000 emails. This guide is the practical cookbook: how to grow from sandbox to scale, region-by-region orchestration, what AcelleMail does at each tier.

SES quota tiers

Tier Daily quota Notes
Sandbox 200/day Default. Recipients must be verified. Free.
Production (new) 50,000/day After production-mode request. Approval ~24h.
Production (raised) Up to 1,000,000/day After 30+ days clean sending; manual request.
Dedicated IP Independent of shared-pool quotas $24.95/mo per IP. Higher reputation control.

Plus a per-second send rate: 1/sec sandbox, 14/sec new-production, up to 500+/sec with raised limits.

Recipe 1: Get out of sandbox

Sandbox = 200/day, recipients must be verified. Useless for marketing.

To leave sandbox:

  1. AWS Console → SES → Account dashboard → Request production access
  2. Form: use case, expected volume, complaint/bounce handling
  3. Approval: 24-48 hours typical

Be specific + honest. AWS rejects:

  • "Send to a purchased list" — instant denial
  • Vague descriptions — back-and-forth, slows approval
  • No mention of unsubscribe + consent process — denial

Good template:

Use case: Marketing email for SaaS customers who explicitly opted in via signup form. We currently have 25,000 subscribers across 3 lists in [region], all collected via double-opt-in over the past 2 years. Expected volume: 50,000/month initially, growing to 250,000/month over 12 months. Bounces and complaints are auto-processed via AcelleMail's bounce + FBL handlers; unsubscribe links present in every email.

Recipe 2: Configure SES in AcelleMail

Open the sending-server detail

In AcelleMail's sidebar, click Sending → Sending servers. The list shows every server connected to this account with its status chip, sending limit, and last activity:

Customer sending-server list

Click into the row you want to configure. The detail page surfaces Connection settings (host / credentials), Configuration (server name, default from, sending limit, bounce + FBL handler), and the Test connection / Send test email buttons in the toolbar:

Server detail — Connection + Configuration

For SES specifically:

Pick the SES type

Type picker:

Type selector

Two SES options:

  • Amazon SES (API) — uses SES SendEmail API. Faster, better tracking. Recommended.
  • Amazon SES (SMTP) — uses SES SMTP relay. Vendor-neutral, slightly slower.

Pick API for the AcelleMail-side install. The API form:

Amazon SES API create form

The SMTP alternative — if you need the vendor-neutral integration:

Amazon SES SMTP create form

Configure credentials + region

AWS Access Key ID:     [from IAM SES-FullAccess user]
AWS Secret Access Key: [paired with above]
Region:                [where you verified your domain — us-east-1, eu-west-1, etc.]
Default from email:    [verified address on your domain]
Sending limit:         50000 (for production-default daily quota)

Save. AcelleMail validates immediately — Active badge or inline error.

Verify the auth chips

Server detail shows the auth status:

Sending server with SPF/DKIM/DMARC chips

All three should be Green if your SES setup is correct. If any Red, the verify-domain wizard will walk you through DNS records.

Recipe 3: Raise the per-account quota

After ~30 days of clean sending, you can request raised limits:

  1. AWS Console → SES → Account dashboard
  2. Service quotas (in the AWS account, not just SES) → search "ses"
  3. Find: "Sending quota" + "Sending rate"
  4. Request quota increase

Approval: ~24-48h. AWS sees your bounce rate + complaint rate; if clean, approval is automatic.

Current Request up to Typical approval
50k/day 200k/day Immediate if metrics clean
200k/day 1M/day Up to 1 week, manual review
1M/day 5M+/day Account-team negotiation

Recipe 4: Dedicated IP for premium reputation

At $24.95/mo, dedicated IP gives:

  • Full reputation control (your traffic only)
  • Better postmaster signals (per-IP rep)
  • Pool of dedicated IPs available for rotation

Setup:

  1. AWS SES → Dedicated IPsRequest dedicated IP
  2. Wait 1-2 days for provisioning
  3. AcelleMail: no config change required; SES routes via dedicated IP automatically

For a pool of dedicated IPs:

AWS SES → Configuration Sets → "production-marketing"
  Dedicated IP pool: [ip1, ip2, ip3]
  Tracking: enabled
  CloudWatch destination: enabled

AWS SES → Configuration Sets → "production-transactional"
  Dedicated IP pool: [ip4]
  Tracking: disabled (transactional doesn't need engagement tracking)

In AcelleMail admin: set the Configuration Set in the sending-server advanced config. Campaigns automatically use the right IP pool.

Recipe 5: Multi-region for global audience

If your audience is global, set up SES in 3 regions:

us-east-1     (Virginia)   - US recipients, best AWS-global integration
eu-west-1     (Ireland)    - EU recipients, GDPR data residency
ap-southeast-1 (Singapore)  - APAC recipients

Process:

  1. Verify your domain in EACH region (separate verification per region)
  2. Add 3 sending servers in AcelleMail (one per region)
  3. Tag subscribers by region: tag:us, tag:eu, tag:apac
  4. Create 3 Plans, each scoped to a single regional server
  5. Assign campaigns to the right Plan based on segment

Cost: SES is $0.10/1k regardless of region. Multi-region adds zero marginal cost beyond the verified-domain effort.

Recipe 6: Monitoring

Daily checks:

  1. AcelleMail bounce log — last 24h pattern:

Campaign bounce log

Target: bounce rate <2%, complaint rate <0.1%.

  1. AWS CloudWatch SES metrics:

    • BounceRate → keep <5%
    • ComplaintRate → keep <0.1%
    • Reputation → high
    • SendsForGeneralRecipient → trending up
  2. Google Postmaster Tools for Gmail-specific signals (see walkthrough)

  3. Microsoft SNDS for Outlook-specific (see walkthrough)

If any signal goes red, AWS may auto-suspend your account. Recovery requires audit + AWS engagement.

Common UI signals + fixes

Symptom Likely cause UI fix
New SES server status Testing indefinitely Region mismatch (verified in us-east, server set to eu-west) Edit credentials → match region
Test send fails "Email address not verified" Still in sandbox; can only send to verified addresses Request production access
Production approved but 200/day cap still applied Daily quota allocation is gradual; AWS raises over days Send at max daily; AWS auto-raises if clean
Bounce rate over 5% SES auto-pauses accounts above 5% Pause; clean list; resume slowly
Complaint rate over 0.1% SES auto-pauses accounts above 0.1% Pause; audit consent; investigate before resume
All emails to one region failing That region's verification expired or DKIM key rotated Re-verify in that region; update sending server config
Tracking shows 0% opens SES open-tracking requires Configuration Set with tracking enabled Add Configuration Set in admin advanced

Cost math

50k/day SES production = 1.5M/month = $150/month
With 3 dedicated IPs = $150 + $75 = $225/month

vs Postmark same volume = $1500+/month
vs SendGrid same volume = $1500+/month
vs Mailgun same volume = $1000+/month

SES is the cheapest at scale by 5-10×. Worth the AWS-side complexity.

Advanced: SES auto-pause recovery, IAM least-privilege, multi-account orchestration

SES auto-pause recovery:

When SES auto-pauses your account due to bounce/complaint rate spike:

Day 0: Auto-paused notification from AWS
       AWS console: SES → Account dashboard → Status: Paused
Day 1: Audit + identify root cause
Day 2: Compose detailed response to AWS, including:
       - Root cause analysis
       - Remediation actions taken (list cleaned, sending paused, etc.)
       - Process changes preventing recurrence
Day 3-7: Submit request to AWS Support to lift the pause
Day 7-14: AWS reviews; if convinced, lifts the pause
Day 14: Resume sending at 50% of pre-incident volume, slowly ramp back

Frequency: most accounts hit auto-pause once (the learning event). Repeat offenses get manual review + potentially account suspension.

IAM least-privilege:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "SESSendOnly",
    "Effect": "Allow",
    "Action": [
      "ses:SendEmail",
      "ses:SendRawEmail",
      "ses:GetSendQuota",
      "ses:GetSendStatistics"
    ],
    "Resource": "*",
    "Condition": {
      "StringEquals": {
        "ses:FromAddress": "[email protected]"
      }
    }
  }]
}

Restricts the AcelleMail IAM user to send-only from a specific address. If credentials leak, blast radius is contained.

Multi-account orchestration:

For SaaS operators with high volume, split across multiple AWS accounts:

AWS Account A: SES production, dedicated IPs 1-5
  Verifies domains for Customer-Tier-1

AWS Account B: SES production, dedicated IPs 6-10
  Verifies domains for Customer-Tier-2

AWS Account C: SES production, shared pool only
  Verifies domains for Customer-Tier-Free

Per-account quotas + dedicated IPs scale linearly. Some operators use 5+ AWS accounts to total 5M/day SES capacity.

In AcelleMail: configure each AWS account as a separate sending server. Customer plans attach to the appropriate server tier.

Bounce/complaint webhook via SNS:

# SES → Configuration Set → Event Destinations → Add SNS
# Topic: "ses-bounces"
# Events: bounce + complaint

# Subscribe AcelleMail to the SNS topic via HTTP endpoint
aws sns subscribe \
  --topic-arn arn:aws:sns:us-east-1:ACCT:ses-bounces \
  --protocol https \
  --notification-endpoint https://acellemail.com/webhooks/ses-bounces

AcelleMail's bounce handler receives bounces in real-time, updates subscriber statuses, removes hard-bounced addresses immediately.

Configuration Sets for advanced features:

# Set up tracking + dedicated pool
aws ses put-configuration-set-tracking-options \
  --configuration-set-name production-marketing \
  --tracking-options CustomRedirectDomain=track.yourdomain.com

aws ses put-configuration-set-event-destination \
  --configuration-set-name production-marketing \
  --event-destination Name=CloudWatch,Enabled=true,MatchingEventTypes=send,reject,bounce,complaint

Configuration Sets are powerful but complex. Use them when you need per-campaign-class tracking or pool routing.

SES + AcelleMail performance tips:

  1. Use API (not SMTP) for higher throughput
  2. Set Configuration Set tracking; AcelleMail captures opens/clicks via your tracking domain
  3. Per-region servers in AcelleMail for global audience
  4. Match sending limit to vendor quota explicitly
  5. Daily AWS CloudWatch + AcelleMail bounce/complaint dual-check
  6. Quarterly review: are you outgrowing SES capacity? Plan multi-vendor or multi-account.

Related articles

14 comments

9 comments

  1. akira.tnk88
    we hit a Spamhaus listing once. Self-service delisting was actually fast (< 24h) but the reputation recovery took weeks. Not the listing itself that hurt — the user complaints that caused it.
    1. admin
      Useful field report. The 'kill -9 was the only fix' edge case is rare but real — we'll note it as a fallback.
  2. jmorrison.itop…
    Does engagement-based segmentation help during warmup? E.g. only sending to the most-engaged 20% during week 1?
    1. admin
      currently a manual step. theres a feature request tracking it on the repo if you want to +1.
  3. nadia.r.cl
    Bookmarked. Going to share with the team — we've been winging warmup and it shows in the numbers
    1. admin
      Thanks. Pass it along if it helps your team
  4. danrey.dev
    This is the clearest IP warmup schedule I've found. The volume table at the top is what I'm referencing daily
  5. linhvu.dev
    the Postmaster Tools section is gold. Most senders don't even know it exists.
  6. cw.dev.sh
    Confirming the Postmaster Tools data lag — sometimes 48 hours, sometimes longer. Dont make decisions on a single day's data.
  7. sofia.costa.pt
    we warmed up a dedicated ip last fall. the 2-week ramp this article describes is on the aggressive side — gmail in particular punishes anything faster than ~3-4 weeks. we did 4 weeks and had a clean ramp.
  8. rafa.silva.br
    If you're warming a new IP after a known issue, consider seeding with transactional mail first (password resets, order confirmations). Higher engagement rate per send than marketing — helps the reputation ramp. fwiw
    1. admin
      Good tip. The Cloudflare-outbound-rate-limit case is something we hadn't documented
  9. d.cohen.tlv
    for very low-volume senders (< 5k/month), does warmup even matter? or just send and let the provider's shared pool absorb the trickle?
    1. admin
      We tested this with up to 1M subscribers on a $40/mo VPS. Past that you start needing query optimization. Below that, the defaults are fine.

More in Sending & Deliverability