Sending Throttling Strategies — Pace Your Volume in AcelleMail

Blast 500k emails at once and you'll throttle yourself: receiving servers tar-pit you, your IP reputation drops, complaint rate spikes. AcelleMail's per-server sending limit lets you pace. This guide walks the UI + 4 throttling patterns by scenario.

Why throttle

Receiving servers throttle senders that spike. The math:

  • Sustained 5,000/hour for 30 days → normal traffic; clean reputation
  • 50,000 in 10 minutes → spike alarm; receivers throttle or temp-block

A throttle = AcelleMail enforces a max-rate on its outbound queue. Each receiving server sees you arriving at a steady cadence rather than a flash.

Configure throttle per-server

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

Where the throttle lives

Same sending-server detail → Configuration section. The Sending limit dropdown caps how many emails AcelleMail will hand to this server per unit of time (per minute / hour / day):

Sending limit dropdown — 5,000 emails per 1 hour

AcelleMail enforces the limit globally — when the rolling-window counter hits the cap, the queue holds back until the window slides. No throttling code in your campaigns; configure once per server.

The dropdown options typically include:

100 emails per 1 minute
500 emails per 1 minute
1,000 emails per 1 minute
500 emails per 1 hour
5,000 emails per 1 hour
50,000 emails per 1 hour
5,000 emails per 1 day
50,000 emails per 1 day
Unlimited

Pick based on volume target + IP maturity.

4 throttling patterns by scenario

Pattern A: New IP warmup (Day 1)

Sending limit: 100 emails per 1 hour
Daily ramp:    +50% each day
Target:        Day 30 = full volume

Low rate, steady through the day. Pairs with engaged-segment-first audience selection (see IP warmup schedule).

Pattern B: Mature IP at scale (steady-state)

Sending limit: 50,000 emails per 1 hour OR Unlimited
Burst:         Spread campaign launches across day (multiple smaller campaigns instead of one mega-blast)
Quota:         Daily cap matches vendor's published quota

At >100k/day, you're past warmup. Throttle still acts as a circuit-breaker — if a runaway campaign accidentally enqueues 1M sends, the per-hour cap prevents the burst from happening all at once.

Pattern C: Multi-vendor split

Server A (SES):       30,000 emails per 1 hour (long-running)
Server B (Postmark):  10,000 emails per 1 hour (warming)
Server C (Mailgun):    5,000 emails per 1 hour (warming)

AcelleMail's dispatcher rotates across all three, but per-server caps prevent any single one from being overloaded. Combined: 45k/hour aggregate; per-server limits matched to each server's reputation maturity.

Pattern D: Burst-friendly transactional + steady marketing

Server T (transactional):  Unlimited (login emails, password resets must send immediately)
Server M (marketing):       5,000 emails per 1 hour (steady)

Two separate Plans, one server each. Transactional bypasses throttle (low volume, high priority). Marketing throttled to keep reputation clean.

When to step up vs step down

Signal Action
Day-after bounce rate <2%, sustained 7 days Step up sending-limit by ~25%
Bounce rate creeping 3-4% HOLD current cap; investigate before stepping up
Bounce rate >5% Step DOWN cap by 50%; investigate root cause
Complaint rate <0.05% sustained Cap acceptable; can step up
Complaint rate >0.15% Step down cap; audit content + consent
Daily cap hit by noon every day Cap too low for traffic; raise OR add second server
Daily cap never hit, sends complete at midnight Cap too high relative to actual traffic; either fine OR reduce for safety

Common UI signals + fixes

Symptom Likely cause UI fix
Campaigns queue but don't send during the day Sending limit hit; rest is rate-paced into next window Expected behavior; raise cap if too restrictive
Burst of 5,000 takes 30 minutes to dispatch Throttle is working as designed Lower per-minute cap if you want even slower; raise if you want faster
Sub-second between sends in tracking log No throttle configured (Unlimited) If reputation is concern, set a per-minute or per-hour cap
Daily cap shows 5,000 but campaign is queueing more Multiple campaigns sharing the server pool; aggregate exceeded daily cap Stagger campaign launches; OR raise daily cap
Single subscriber gets duplicate emails NOT a throttle issue; usually retry-loop or queue bug Investigate separately — see Why is my campaign stuck

Throttle interaction with batch sending

AcelleMail's send pipeline batches messages. The throttle applies at the per-message level (queue-handler picks a server, rate-limits its own picks).

For example: throttle = 5,000/hour. Campaign with 10,000 recipients:

  • 0:00 — first 5,000 dispatched
  • 1:00 — second 5,000 dispatched
  • Total time: ~1 hour

For 100,000 recipients at 5,000/hour: ~20 hours. Either raise the cap or add a second server.

Multi-server throttle aggregation

When you have 3 servers in a pool, each with its own cap:

Server A: 5,000/hour
Server B: 5,000/hour
Server C: 5,000/hour

Total throughput = 15,000/hour. Round-robin distribution means each server hits its own cap, then queue fills the next batch.

If one server caps out, the dispatcher routes to the others until they also cap; then everyone waits for the next window. AcelleMail handles this automatically — no manual intervention needed.

Advanced: per-domain throttling, custom rate limits via API, and time-of-day patterns

The server-level sending-limit applies to all outbound traffic. For per-recipient-domain throttling (e.g. "no more than 1000/hour to gmail.com specifically"), customize via:

Per-domain limits in sending-server config:

// In sending-server admin advanced config (some installs expose this)
'rate_limits_by_domain' => [
    'gmail.com'  => 1000, // per hour
    'outlook.com' => 500,
    'yahoo.com'  => 300,
    'icloud.com' => 200,
    'default'    => 5000,
],

When the dispatcher needs to send to a domain that's hit its per-domain cap, it queues those addresses until the window slides.

Custom rate-limit via API:

For programmatic adjustment (e.g. when CloudWatch detects a reputation issue):

curl -X PATCH "https://acellemail.com/api/v1/admin/sending-servers/{server_uid}" \
  -H "Authorization: Bearer $ADMIN_TOKEN" \
  -d '{
    "sending_limit": 1000,
    "sending_limit_period": "minute"
  }'

Effects immediately on the next batch.

Time-of-day pattern — sending more during recipient business hours, less at night:

# Cron: 09:00 — bump to weekday daytime rate
curl -X PATCH ... -d '{"sending_limit": 20000, "sending_limit_period": "hour"}'

# Cron: 22:00 — cut to overnight rate
curl -X PATCH ... -d '{"sending_limit": 2000, "sending_limit_period": "hour"}'

For US-based audience: send during US business hours; cut volume during EU/APAC night-time. Result: highest-engagement windows get full volume.

Burst-on-launch + steady-after pattern — for campaign launches, the typical curve:

First 5 minutes:  3000/min (push the first thousand recipients immediately)
Next 15 minutes:  1500/min
After that:       100/min (steady drip)

Get the engaged subscribers first (they open within minutes), then trickle the rest. Improves attribution + click-through optics in analytics.

Per-segment throttling — combine throttle with segment scope:

Marketing campaign: 5,000/hour, sent to engaged-30d segment only
Re-engagement campaign: 1,000/hour, sent to inactive-90d segment only

Different urgencies, different paces, different audience risk levels. Combined: clean reputation, predictable performance.

Vendor-aware throttle alignment:

Vendor Default cap Recommended throttle
Amazon SES (production, default quota) 50,000/day, 14/sec Set to 12/sec to stay under
Postmark 100,000/mo on free; varies on paid Match to plan limits
SendGrid Free 100/day Set 50/day to stay safe
SendGrid Essentials 50,000/mo Match plan
Mailgun Flex 5,000 free / scale paid Match account quota

Why under-shoot the vendor cap? Vendor enforces hard limits; AcelleMail's throttle is the soft layer. If vendor's hard limit hits, you get throttle errors from the vendor (delays + retries). If your AcelleMail-level cap hits first, you get clean queue-paced delivery.

Related articles

11 コメント

コメント 6 件

  1. lequan.saigon
    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
    1. admin
      Thanks for the numbers. Worth pulling into a follow-up post on volume-tier sizing.
  2. sobrien.kw
    If youre 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.
  3. ravi.kumar.del…
    Confirming the Postmaster Tools data lag — sometimes 48 hours, sometimes longer. Don't make decisions on a single day's data
  4. ahmed.hassan.c…
    This is the clearest IP warmup schedule Ive found. The volume table at the top is what I'm referencing daily.
  5. aisha.khan.pak
    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
      Short answer: yes — set the MySQL session variable from your workers .env on boot and you'll get the longer timeout per connection. We'll add an explicit recipe in the next refresh.
    2. 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.
    3. admin (編集済み)
      honest answer: it depends on your provider. SES handles it gracefully; Mailgun is stricter. We'll add a provider-by-provider table in the next revision.
  6. jmorrison.itop…
    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 (編集済み)
      Thanks for sharing. The pattern you describe is exactly the use case we built that feature for — glad it landed for you.

More in Sending & Deliverability