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:
- AWS Console → SES → Account dashboard → Request production access
- Form: use case, expected volume, complaint/bounce handling
- 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:

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:

For SES specifically:
Pick the SES type#
Type picker:

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:

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

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:

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:
- AWS Console → SES → Account dashboard
- Service quotas (in the AWS account, not just SES) → search "ses"
- Find: "Sending quota" + "Sending rate"
- 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:
- AWS SES → Dedicated IPs → Request dedicated IP
- Wait 1-2 days for provisioning
- 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:
- Verify your domain in EACH region (separate verification per region)
- Add 3 sending servers in AcelleMail (one per region)
- Tag subscribers by region:
tag:us, tag:eu, tag:apac
- Create 3 Plans, each scoped to a single regional server
- 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:
- AcelleMail bounce log — last 24h pattern:

Target: bounce rate <2%, complaint rate <0.1%.
-
AWS CloudWatch SES metrics:
BounceRate → keep <5%
ComplaintRate → keep <0.1%
Reputation → high
SendsForGeneralRecipient → trending up
-
Google Postmaster Tools for Gmail-specific signals (see walkthrough)
-
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:
- Use API (not SMTP) for higher throughput
- Set Configuration Set tracking; AcelleMail captures opens/clicks via your tracking domain
- Per-region servers in AcelleMail for global audience
- Match sending limit to vendor quota explicitly
- Daily AWS CloudWatch + AcelleMail bounce/complaint dual-check
- Quarterly review: are you outgrowing SES capacity? Plan multi-vendor or multi-account.
Related articles#