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": "noreply@yourdomain.com"
      }
    }
  }]
}

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

6 コメント

コメント 5 件

  1. joel.anders.se
    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.
  2. y.yamamoto
    Does engagement-based segmentation help during warmup? E.g. only sending to the most-engaged 20% during week 1?
    1. admin
      there's no built-in way today. Two workarounds: (1) cron + custom script polling the API every N minutes, (2) webhook-driven if your event source supports it. Most operators go with #2.
  3. linhpm.devs
    We warmed up a dedicated IP last fall. The 2-week ramp this article describe is on the aggressive side — Gmail in particular punishes anything faster than ~3-4 weeks. We did 4 weeks and had a clean ramp
  4. sobrien.kw
    bookmarked. going to share with the team — we've been winging warmup and it shows in the numbers.
  5. tnovak.cz
    confirming the postmaster tools data lag — sometimes 48 hours, sometimes longer. dont make decisions on a single day's data.

More in Sending & Deliverability