You send a batch of order-confirmation emails, an invite list, or just a busy morning of contact-form submissions — and then nothing. Recipients say they never got the email, your WordPress site logs "message sent" but the inbox stays empty, and if you dig into cPanel you find a queue full of mail that just... isn't moving. Nine times out of ten on shared or reseller cPanel hosting, this is the Max Hourly Email Limit doing its job — blocking what looks like a spam burst, even when it's your own legitimate traffic.
Symptom
You'll usually notice one or more of these:
- An automated email from your host with a subject like "Exceeding Email Sending Limits" or "cPanel Account has exceeded the maximum number of email messages per hour"
- Contact form or WooCommerce order emails that show as "sent" in the plugin but never arrive
- Mail stuck in the queue in WHM → Mail Queue Manager, sitting there for hours
- Bounce-backs mentioning things like
"421 Temporary local problem - please try again later"or"ratelimit"in the delivery report
The frustrating part is that everything upstream — your app, your WordPress site, your mail client — thinks the send succeeded. The throttle happens after your message leaves the application and hits cPanel's outbound mail layer, so nothing in your app's logs will tell you it's happening.
Why This Happens
cPanel (through Exim, the mail transfer agent it uses) enforces a per-hour cap on how many messages a single cPanel account can send. This isn't a bug — it's the main defense shared hosting has against a compromised account quietly turning into a spam relay. The default is usually somewhere between 200 and 500 emails per hour, but hosts commonly set it lower on shared plans to protect the server's overall IP reputation.
Once an account hits the cap, Exim doesn't bounce every message outright — it typically defers the excess, queuing it to retry later, while newer sends past the limit may get rejected outright depending on the server's configuration. Either way, the practical effect is the same: your mail is stuck or dropped for the rest of that hour.
| Common Cause | What's Actually Happening |
|---|---|
| Bulk newsletter or announcement sent from cPanel/webmail | You genuinely sent more messages in an hour than the account's limit allows |
| WooCommerce/WordPress sending order and notification emails in bulk | A sale, a plugin re-sync, or a bulk order-status change fires dozens of transactional emails at once |
| Compromised WordPress admin or FTP account | A script or plugin backdoor is silently spamming through your mail account — the limit is actually saving your IP reputation here |
| A misconfigured cron job or webhook loop | Something is retrying and re-sending the same email repeatedly |
| Shared IP already near its host-wide sending cap | Less common, but on some hosts the limit is tied to the whole server, not just your account |
Step 1: Confirm It's Actually the Sending Limit
Before changing any settings, verify this is really what's happening rather than an SMTP credentials issue or spam-folder problem.
- In cPanel, open Email Deliverability or Track Delivery and search for the recipient address or a recent timestamp. A result reading something like
"Exceeding hourly limit"or"maximum number of emails per hour"confirms it. - If you have WHM or SSH access, check the mail log directly:
tail -f /var/log/exim_mainlog | grep -i "ratelimit\|too many"
Look for lines referencing your cPanel username and phrases like "the domain has exceeded the max defer count" or a rejection tied to ratelimit. That's your confirmation — and it also tells you exactly which account is triggering it, which matters if you manage several sites under one hosting package.
Step 2: Check and Clear the Queue
If you have WHM access (VPS or dedicated), start with the queue itself:
- Go to WHM → Email → Mail Queue Manager and look for messages stuck against your domain.
- From SSH, get a count and summary of what's queued:
exiqgrep -i | wc -l
exim -bp | exiqsumm
If you spot a huge volume of mail you didn't send — dozens of messages to unfamiliar addresses, or the same message repeated many times — that's a strong signal of a compromised script rather than a legitimate burst. Don't just clear the queue and move on; that treats the symptom, not the infection. Change your WordPress admin and database passwords, update plugins, and scan for a backdoor before doing anything else.
If the queued mail is legitimate and just waiting on the hourly reset, you can safely leave it — Exim will retry automatically. To manually remove a specific stuck or spam message once you've identified its ID from exim -bp:
exim -Mrm <message-id>
Step 3: Adjust the Limit (If You Have WHM Access)
On a VPS or dedicated server where you manage WHM yourself, you can raise the limit two ways:
- Server-wide default: WHM → Tweak Settings → search for "Max hourly email limit" and raise the number. This affects every account on the server unless overridden individually.
- Per-account override: WHM → Manage Email Limits (or "Edit Max Emails Per Hour" depending on WHM version), pick the specific cPanel account, and set a higher value for that account only. This is the better option if one legitimate high-volume site is sharing a server with others — you raise the limit only where it's actually needed.
Resist the urge to set it absurdly high or unlimited. The limit exists to protect your server's sending IP reputation with Gmail, Outlook, and spam filters generally — a huge, permissive cap makes the whole server (and everyone on it, if it's shared) more exposed if any single account gets compromised later.
Step 4: On Shared Hosting Without WHM Access
If you're on a shared or reseller plan and don't have WHM, you can't change the limit yourself — that's set at the server level by your host. Open a support ticket and include:
- The approximate time the emails failed
- Roughly how many emails you were sending and why (newsletter, order batch, migration, etc.)
- Whether this is a one-time need or an ongoing pattern
Most hosts, SkyServer included, will happily raise a legitimate account's limit once they can see it's not abuse — it's a five-minute change on their end. What they won't do is raise it blind, since that's exactly the request a compromised account would also make.
Prevention
- Move bulk and transactional mail off shared cPanel sending entirely. Use a dedicated transactional service (Amazon SES, SendGrid, Mailgun, Brevo) via SMTP for order confirmations, password resets, and newsletters. These services are built for volume and don't touch your hosting account's hourly cap at all.
- Keep WordPress lean on outbound triggers. A plugin that emails you on every login attempt or every failed cron run adds up fast — audit what's actually firing mail.
- Monitor for compromise. Set a calendar reminder to skim Track Delivery monthly. A sudden spike to addresses you don't recognize is the earliest sign of a hacked account, well before your IP lands on a blocklist.
- Split high-volume sites onto their own account or server if you're managing several domains under one hosting package and one of them regularly sends in bulk — it stops one site's traffic from throttling another's mail.
Frequently Asked Questions
What's the default max hourly email limit on cPanel?
It varies by host and plan, but 200-500 emails per hour per account is typical on shared hosting. SkyServer's default varies by plan tier — check your welcome email or ask support if you're not sure what yours is set to.
Will queued emails eventually send on their own?
Usually yes. Exim retries deferred mail automatically, and once you're back under the hourly threshold, the backlog typically clears within an hour or two. If it's been much longer than that, check the queue directly rather than assuming it'll sort itself out.
Can I bypass the limit with an SMTP plugin like WP Mail SMTP?
No — if you're routing SMTP through your own cPanel mail account, you're still subject to the same server-side limit. The only way around it is to send through an external transactional email provider instead of your hosting account's mail server.
Does raising the limit hurt my email deliverability?
Not by itself, but a limit set too high removes an early warning sign if your account ever gets compromised — a hacked site can blast thousands of spam emails before anyone notices, which can get your server's IP blocklisted. Raise it to what you actually need, not further.
My emails were rejected, not just delayed — what's different?
Deferred mail retries automatically; rejected mail does not. A hard rejection usually means the limit was hit repeatedly and Exim decided to stop accepting new messages from that account for the remainder of the hour, or that the message also failed a separate check (like SPF/DKIM). Check Track Delivery for the exact reason rather than assuming it's the same fix.
