PLUGIN EXTENSIONS & CUSTOM FEATURES

Round-robin sending across SMTP providers, with caps a campaign respects

A FluentSMTP module that spreads a FluentCRM campaign across multiple sending connections, each with its own daily cap — and when every cap is hit, the campaign pauses and resumes by itself the next day.

+1,054

lines added

5

admin endpoints

2

cron events

0

new tables

WordPressPHPFluentSMTPFluentCRMVue

ClientA business sending FluentCRM campaigns at provider-limit volume (anonymised)
ChallengeStock FluentSMTP routes every email through one connection — one daily quota, one sender reputation. Bulk campaigns burned the quota, got throttled, and put the whole sending domain at risk.
DeliveryA round-robin module for FluentSMTP: the rotation engine, per-connection daily caps with automatic reset and cleanup, a full admin screen, and the FluentCRM integration that pauses and resumes campaigns at the cap.
StackWordPress, PHP, FluentSMTP, FluentCRM, Vue
TimelineApril 2025

The challenge

FluentSMTP routes every email WordPress sends through one connection: the default, or the one mapped to the From address. One provider means one daily quota and one sender reputation. The client’s FluentCRM campaigns ran at exactly the volume where that breaks — a bulk send burned through the day’s quota, the provider throttled the rest, and every email the business sent rode on the reputation of a single domain.

Adding more providers only helps if something spreads the load and respects each provider’s limit. And the hard part is what happens at the limit: in FluentCRM, a failed send is terminal — the row is marked failed and never re-enters the queue. So a cap implemented as a send failure would not pause a campaign, it would silently strand the tail of it. The cap had to stop the campaign the way FluentCRM itself stops one: cleanly, resumably, with every queued email intact.

What ScalarWP built

ScalarWP built round-robin sending as a FluentSMTP module. The rotation engine sits in the plugin’s own send path: it reads every configured connection, drops any that has reached its daily cap, sends a couple of emails through the current connection, then advances to the next — persisting its position so rotation continues across requests. Each send increments that connection’s counter for the day, and the From address follows the connection, so FluentSMTP’s own provider resolution keeps working unchanged.

Every connection carries its own daily limit, with zero meaning unlimited. A scheduled job seeds each day’s counters and stamps the reset; a weekly job prunes counters older than thirty days, so a year of hourly sending stores no more than a month of history. Transactional mail stays safe throughout: when rotation is off, ordinary sending falls back to the default connection exactly as stock FluentSMTP behaves.

One admin screen runs the whole module: an on/off switch, the current connection with its rotation progress, a per-connection limits table showing today’s usage against each cap, total-sent statistics, and one-click resets for the rotation position and the day’s counters. Five authenticated admin endpoints back the screen — capability-checked, nonce-protected, with no new public routes and no new database tables.

The FluentCRM integration is what makes the caps mean something. When every connection has hit its limit, the module gates FluentCRM’s own email scheduler: queued campaign emails simply stay scheduled — nothing is rewritten, nothing marked failed. When the day rolls over, or an admin clears the counters, the scheduler’s next tick continues the campaign exactly where it stopped, pacing intact. The campaign pauses and resumes without anyone touching it.

The outcome

  • Campaigns flow inside every provider’s daily limit instead of hammering one connection until it throttles.
  • Sender reputation is spread across connections rather than concentrated on a single domain.
  • At the cap, campaigns pause cleanly and resume by themselves — no failed rows, no stranded sends, no manual restart.
  • The whole module adds 1,054 lines across 8 files: 5 admin endpoints, 5 WordPress options, 2 cron events, 1 admin screen, 0 new tables.
  • Limits, resets and the on/off switch are all admin-screen controls — no developer needed day to day.

What ScalarWP delivered

  • The rotation engine inside FluentSMTP’s send path, with per-connection daily counters.
  • Per-connection daily caps with automatic day-roll reset and thirty-day counter retention.
  • A round-robin admin screen: status, limits, usage, statistics, and manual resets.
  • The FluentCRM scheduler integration that pauses campaigns at the cap and resumes them automatically.
  • Production rollout on the client’s sending stack.

Why it mattered

Deliverability problems rarely announce themselves — a provider throttles quietly, a domain’s reputation erodes send by send. Spreading one campaign across several connections, each held inside its own limit, turns those failure modes into a visible dashboard. And because the cap pauses the campaign through FluentCRM’s own scheduler instead of failing sends, the limit is an operational rhythm — full speed today, continue tomorrow — not a pile of broken emails.

Sending more than one provider allows?

Tell us your campaign volume and the limits you keep hitting. We will scope the sending layer that spreads the load — and pauses instead of failing.

← All case studies