
Email issues on cPanel usually follow a few repeat patterns. A client says “can’t send,” Outlook prompts for a password, or Roundcube never finishes loading. If you follow the same checks each time, you can often find the cause in 10–20 minutes. You can do it without restarting services or guessing. This cPanel email troubleshooting tutorial gives you a practical triage flow for WHM/cPanel on a VPS or dedicated server.
If you manage mail for multiple domains, schedule a maintenance window when possible. On a live production server, keep changes small, reversible, and documented.
Before you touch anything: capture the failing symptom
Start with one clean example you can reproduce. Ask for specifics, not summaries:
- Exact error message (copy/paste, not paraphrase)
- Client type: webmail (Roundcube), Outlook, Apple Mail, mobile app, SMTP plugin, API app
- Account: user@domain.tld and time of failure (with timezone)
- Protocol + port: IMAP 993, POP3 995, SMTP 465/587, or SMTP 25
- Server hostname they’re using (mail.domain.tld vs server hostname)
On a busy server, this is what keeps you sane. Stick to one user, one domain, and one timestamp.
Quick server health checks in WHM (2 minutes)
Open WHM and confirm the fundamentals. These checks catch “mail is down” before you chase DNS or client settings.
- WHM → Service Status → Service Status: confirm
eximanddovecotare running. - WHM → Server Status → Server Information: check load and memory pressure. Heavy RAM pressure can cause auth timeouts that look like bad passwords.
- WHM → Server Configuration → Tweak Settings: verify the server hostname is a valid FQDN and resolves.
If you’re building a hosting server from scratch, do this on a clean VPS first. It’s easier than untangling a half-configured mail stack later.
A HostMyCode VPS gives Exim/Dovecot steady resources. It also helps avoid “noisy neighbor” delays you can see on crowded platforms.
Confirm the domain’s mail routing and local mailbox existence
This catches a common reseller mix-up. The domain routes mail elsewhere, but users still try to log into your server.
- In cPanel (for the domain owner): Email → Email Routing
- Set it to Local Mail Exchanger if this server should receive mail for the domain.
- In cPanel: Email Accounts → confirm the mailbox exists and isn’t over quota.
On the shell (as root), confirm the mailbox directory exists:
ls -lah /home/USERNAME/mail/DOMAIN.TLD/USER/
If that directory is missing, it isn’t a “password issue.” It’s routing, provisioning, or account creation.
cPanel email troubleshooting tutorial: diagnose “can’t send email” (SMTP)
Outbound failures usually fall into four buckets: authentication, blocked ports, rate limits, or reputation/SMTP rejects. Prove the easy items first. Then drill down.
Step 1: test SMTP login from the server
This removes the desktop app, Wi-Fi, and local firewall from the equation.
On the server, install a test client (Debian/Ubuntu):
apt update
apt install -y swaks
Then test authenticated submission on 587:
swaks --to you@externaldomain.tld \
--from user@domain.tld \
--server 127.0.0.1 \
--auth LOGIN \
--auth-user user@domain.tld \
--auth-password 'PASTE_PASSWORD' \
--port 587 --tls
- If this works locally, Exim auth is fine. Focus on client settings, firewall rules, DNS, or remote rejects.
- If it fails, go straight to Exim logs and auth errors.
Step 2: check Exim’s main log for the exact reject reason
In WHM, Email → Mail Delivery Reports is the fastest per-message view. On the shell:
tail -n 200 /var/log/exim_mainlog
For a specific user or domain:
grep -i "user@domain.tld" /var/log/exim_mainlog | tail -n 50
grep -i "domain.tld" /var/log/exim_mainlog | tail -n 50
Common patterns and what they usually mean:
authentication required→ the client isn’t using SMTP auth on 587/465Rejected after DATA: spam score→ content or headers trigger filtersrate limited/deferred→ sending too quickly or queue pressureSender verify failed→ identity mismatch or a verification/config issue
Step 3: verify ports and firewall aren’t blocking submission
From an external machine (your laptop), test connectivity:
nc -vz mail.domain.tld 587
nc -vz mail.domain.tld 465
nc -vz mail.domain.tld 993
If 587/465 time out, focus on the usual suspects:
- Server firewall rules (CSF/iptables/nftables)
- Upstream provider blocks (some networks block 25; 587/465 should remain open)
- Wrong DNS:
mail.domain.tldpoints to a different host
If you want a clean, hosting-friendly firewall baseline, start by reviewing your current rules. Avoid “deny all” templates.
For a structured verification flow that avoids downtime, keep this checklist handy: VPS security audit tutorial.
Step 4: if email is accepted but not delivered, inspect the queue
Many “not sending” reports are really “accepted, then stuck.” Start with queue size and a quick sample:
exim -bpc
exim -bp | head -n 40
Then read the defer reason for a message:
exim -Mvh MESSAGEID
exim -Mvl MESSAGEID
Typical deferrals include remote greylisting, DNS failures, and remote rate limits. Don’t flush the queue on instinct. Find the dominant failure first.
Fix “can’t receive email” (MX, local delivery, and filters)
Inbound failures are usually routing or DNS. The sender’s server is following DNS. The domain simply points to the wrong place.
Step 1: confirm MX points to the right host
On your workstation or server:
dig +short MX domain.tld
dig +short A mail.domain.tld
Quick sanity checks:
- MX hostnames should resolve to an IP that belongs to your cPanel server (or your mail gateway).
- If the domain uses a third-party mail provider, the MX must match that provider, and cPanel Email Routing must be “Remote Mail Exchanger.”
If you’re mid-migration, split-brain mail is the classic trap. Plan the cutover and set TTLs ahead of time.
Avoid changing web and MX in the same rushed step. This workflow helps keep messages from disappearing during propagation: DNS cutover checklist.
Step 2: check for local delivery errors in Exim log
Look for bounces and local delivery failures around the reported time:
grep -i "<= .*@" /var/log/exim_mainlog | tail -n 50
grep -i "cwd=/home" /var/log/exim_mainlog | tail -n 50
If you see permission errors, treat it as a filesystem ownership problem. On cPanel systems, mailbox and home directory permissions are tightly coupled.
Fix it carefully. A broad chmod -R can break sites and mail.
Step 3: check user-level filters and spam folders
“Missing” messages often landed exactly where the system was told to put them. Have the user check Roundcube’s Junk folder. Then review filters in cPanel:
- Email → Spam Filters (SpamAssassin settings)
- Email → Email Filters (user filters)
- Email → Global Email Filters (account-wide filters)
If the mailbox handles order confirmations or password resets, don’t rely on hunches. Capture the message ID and trace it in WHM Mail Delivery Reports.
Troubleshoot IMAP/POP login loops and webmail failures
Dovecot failures often look like “wrong password,” even with correct credentials. The usual causes are TLS settings, hostname mismatch, or an auth backend issue.
Step 1: verify Dovecot is listening and negotiates TLS
On the server:
ss -ltnp | egrep '(:993|:995|:110|:143)'
openssl s_client -connect 127.0.0.1:993 -starttls imap
If TLS negotiation fails, review service certificate configuration in WHM. cPanel can update service certs via AutoSSL. Hostname changes can still create mismatches.
Step 2: read Dovecot logs around the failure time
Log locations vary by distro and cPanel version. Common paths include:
/var/log/maillog/var/log/messages/var/log/dovecot.log(on some configurations)
Search for the mailbox:
grep -i "user@domain.tld" /var/log/maillog | tail -n 80
Pay attention to:
auth failedwith a specific reasondisconnected (auth failed)bursts (often saved wrong passwords or brute force)SSL handshake failed(client TLS settings)
If you want a Dovecot-first workflow with common failure modes, keep this open while you work: Dovecot IMAP troubleshooting tutorial.
Step 3: fix the common client configuration mistakes
- IMAP server:
mail.domain.tld(or your server hostname if you prefer) - IMAP port: 993 with SSL/TLS
- SMTP server:
mail.domain.tld - SMTP port: 587 with STARTTLS, or 465 with SSL/TLS
- Username: usually the full email address
user@domain.tld - SMTP authentication: enabled
On shared hosting, the most common fix is boring. Use the correct username format and the correct port.
Deliverability triage: SPF, DKIM, DMARC, and rDNS (without going down a rabbit hole)
If users can send but recipients never see the messages (or they land in spam), stop tweaking content first. Check identity alignment instead. Use DNS records and message headers, not guesses.
Step 1: verify SPF and DKIM are present
From the shell:
dig +short TXT domain.tld
dig +short TXT default._domainkey.domain.tld
In cPanel/WHM, enable and repair DKIM/SPF as needed:
- WHM → Email → Email Deliverability
Step 2: verify reverse DNS matches your sending identity
Many receivers penalize missing or mismatched rDNS. Check what the IP resolves to. Then compare it to what the server claims as its hostname:
dig +short -x YOUR.SERVER.IP
hostname -f
If rDNS needs to change, do it deliberately. You don’t want to break other domains sharing the IP.
This guide keeps the process controlled: rDNS setup tutorial.
Step 3: set a basic DMARC policy (start with monitoring)
DMARC helps you see who is sending mail as your domain. If you’re starting out, use p=none first. Review reports before you enforce a stricter policy.
For a hands-on workflow (including alignment checks and report parsing), use: DMARC reporting tutorial.
Hard failures: blocked outbound SMTP (port 25) and what to do instead
Some providers restrict outbound port 25 to reduce abuse. Clients should use 587/465 for authenticated submission. Server-to-server delivery still depends on 25.
Checklist:
- Confirm whether port 25 is blocked outbound from your server network.
- If blocked and you can’t remove the block, configure a trusted SMTP relay for outbound delivery.
- Keep submission (587/465) open for clients.
If you set up a relay for WordPress and application mail, do it cleanly and document it. This guide walks through a sensible setup: SMTP relay setup guide.
Security checks that reduce repeat incidents
Mail issues often repeat because the root cause is abuse. Common examples are compromised passwords, a script sending spam, or repeated brute-force logins.
Lock down logins with 2FA and basic brute-force protection
- Enable 2FA for WHM and resellers, then encourage it for webmail where it fits.
- Block brute-force attempts against cPanel, webmail, and SMTP auth.
On cPanel, use cPanel-aware guidance instead of generic Fail2Ban snippets. Start here: cPanel 2FA setup guide and cPanel Fail2Ban setup guide.
Spot compromised accounts quickly
Two signals show up early:
- Sudden spikes in outbound volume from one mailbox or one account
- Repeated auth failures from many IPs, followed by a successful login
In WHM, watch Mail Delivery Reports. Also consider log monitoring alerts.
If you host clients on your own VPS/dedicated box, a managed option can reduce time-to-response during incidents. managed VPS hosting is a practical fit when email is business-critical and you want help with patching, monitoring, and recovery.
Practical recovery actions (safe, reversible)
After you’ve identified the cause, fix only what you need to fix. These actions are usually safe on production:
- Reset the mailbox password and require the user to update every device.
- Repair email routing (Local vs Remote) after confirming MX.
- Regenerate DKIM/SPF in WHM → Email Deliverability after DNS confirmation.
- Clear a single stuck message from the queue after you’ve read why it’s stuck.
- Temporarily reduce spam filtering aggressiveness if you’ve confirmed false positives, then tune.
Avoid “busy work” that hides the root cause. Examples include repeated restarts or flushing the entire Exim queue without reading deferral reasons.
Troubleshooting checklist you can paste into your ticket notes
- Symptom: send/receive/login/webmail + exact error + timestamp
- WHM services: Exim/Dovecot running, load/memory OK
- Domain routing: Local vs Remote Mail Exchanger
- DNS: MX + A for mail host
- Connectivity: ports 587/465/993 reachable externally
- Logs: Exim main log + Dovecot log entries around timestamp
- Queue: size + dominant deferral reason
- Deliverability: SPF/DKIM/DMARC + rDNS/hostname alignment
- Security: auth failures, brute force, suspicious outbound spikes
Summary: keep email stable by making it observable and boring
The fastest way to fix mail on cPanel is to stop guessing. Follow the same trail every time.
Trace one failure end-to-end: routing, DNS, connectivity, logs, then queue. After a few runs, “can’t send” becomes a checklist instead of a high-stress ticket.
If you want email and web hosting on infrastructure sized for consistent I/O and predictable performance, start with a HostMyCode VPS. If you’d rather not read mail logs at 2 a.m., managed VPS hosting is the straightforward upgrade.
If your clients depend on cPanel email, put it on a VPS that won’t starve mail services under load. HostMyCode offers both a flexible HostMyCode VPS and a hands-off option with managed VPS hosting for day-to-day stability, monitoring, and support.
FAQ
Should I use SMTP 465 or 587 for cPanel email?
Use 587 with STARTTLS for most clients. Use 465 if the client only supports implicit TLS. Either way, enable SMTP authentication and use the full email address as the username.
Why does Outlook keep asking for the password even though it’s correct?
It’s usually a hostname or port mismatch (IMAP 993/SMTP 587), or a device still trying an old password. Check Dovecot logs for auth failures at the reported time.
Mail sends, but recipients never receive it. What’s the first thing to check?
Start with Exim logs and Mail Delivery Reports to confirm acceptance and the remote server response. Then verify SPF/DKIM and reverse DNS for the sending IP.
Can I disable spam filtering to “fix” missing inbound mail?
You can temporarily reduce aggressiveness if you’re seeing false positives, but don’t leave filtering off. It increases abuse risk and can damage IP reputation.
What’s the safest way to change MX during a migration?
Lower TTL in advance, cut over at a planned time, and keep the old server receiving mail during propagation. Use a structured approach like a DNS cutover checklist to avoid lost messages.