{"id":80,"date":"2026-05-17T17:33:26","date_gmt":"2026-05-18T00:33:26","guid":{"rendered":"https:\/\/cpanelreview.com\/index.php\/2026\/05\/17\/troubleshoot-email-delivery-issues-cpanel\/"},"modified":"2026-05-17T17:33:26","modified_gmt":"2026-05-18T00:33:26","slug":"troubleshoot-email-delivery-issues-cpanel","status":"publish","type":"post","link":"https:\/\/cpanelreview.com\/index.php\/2026\/05\/17\/troubleshoot-email-delivery-issues-cpanel\/","title":{"rendered":"How to Troubleshoot Email Delivery Issues in cPanel: A Complete Diagnostic Guide"},"content":{"rendered":"\n<p>When email stops flowing the way it should, diagnosing the root cause can feel like hunting for a needle in a haystack. Whether your outgoing messages are bouncing, landing in spam folders, or simply disappearing into the void, cPanel provides a powerful set of diagnostic tools to trace exactly what&#8217;s going wrong. Understanding how to use these tools effectively can mean the difference between hours of frustration and a quick fix.<\/p>\n\n\n\n<p>This guide walks through the most common email delivery problems in cPanel and the diagnostic methods you can use to identify, isolate, and resolve them. From mail queue inspection and log analysis to DNS verification and SMTP debugging, you&#8217;ll learn the systematic approach that experienced sysadmins use to keep email flowing reliably.<\/p>\n\n\n\n<p><!--more--><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Understanding the cPanel Mail Delivery Pipeline<\/h2>\n\n\n\n<p>Before jumping into troubleshooting, it helps to understand how email moves through the cPanel stack. When you send a message from a cPanel-hosted account, it travels through several stages:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>The mail client (webmail, Outlook, or mobile app) submits the message to the local mail server via SMTP or submission port 587.<\/li><li>Exim, cPanel&#8217;s default Mail Transfer Agent (MTA), receives the message and checks its routing rules.<\/li><li>If the recipient is local (same domain or another domain on the same server), Exim delivers it directly to the local mailbox.<\/li><li>If the recipient is remote, Exim performs a DNS lookup for the destination domain&#8217;s MX records, then attempts delivery to the remote mail server.<\/li><li>The remote server either accepts the message (250 OK), rejects it (permanent error), or defers it (temporary error).<\/li><\/ol>\n\n\n\n<p>A failure at any stage produces different symptoms. Knowing which stage is failing narrows your diagnostic focus considerably.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Checking the Mail Queue and Delivery Logs<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Viewing the Mail Queue<\/h3>\n\n\n\n<p>The mail queue holds messages that Exim couldn&#8217;t deliver immediately. A growing queue often points to a systemic delivery problem.<\/p>\n\n\n\n<p>To view the mail queue in cPanel:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Log in to cPanel and navigate to <strong>Advanced<\/strong> \u2192 <strong>Mail Delivery Manager<\/strong>.<\/li><li>Under <strong>Mail Queue<\/strong>, you&#8217;ll see a list of undelivered messages with their status (frozen or active), sender, recipient, and last delivery attempt time.<\/li><\/ol>\n\n\n\n<p>Alternatively, you can check the queue via SSH:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>exim -bpc<\/code><\/pre>\n\n\n\n<p>This returns the total number of messages in the queue. To see details of each queued message:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>exim -bp | less<\/code><\/pre>\n\n\n\n<p>A frozen message means Exim has stopped attempting delivery after repeated failures. You can thaw frozen messages manually from the Mail Delivery Manager interface or via the command line:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>exim -Mth &lt;message-id&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Analyzing Delivery Logs<\/h3>\n\n\n\n<p>cPanel maintains detailed delivery logs at <code>\/var\/log\/exim_mainlog<\/code>. This log records every SMTP transaction Exim processes, including connection attempts, authentication, routing decisions, and delivery outcomes.<\/p>\n\n\n\n<p>The quickest way to search the logs is through cPanel&#8217;s <strong>Mail Delivery Manager<\/strong> \u2192 <strong>View Message Delivery<\/strong>. Enter the sender or recipient email address, and cPanel displays a timeline of delivery events for recent messages.<\/p>\n\n\n\n<p>For deeper analysis via SSH, use grep to filter specific addresses:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>grep \"user@example.com\" \/var\/log\/exim_mainlog | tail -50<\/code><\/pre>\n\n\n\n<p>Look for key indicators in the log output:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>&#8220;=>&#8221;<\/strong> indicates successful delivery to a recipient<\/li><li><strong>&#8220;->&#8221;<\/strong> indicates delivery to an alias or forwarder<\/li><li><strong>&#8220;**&#8221;<\/strong> indicates a deferral (temporary failure)<\/li><li><strong>&#8220;==&#8221;<\/strong> indicates a frozen message (permanent failure pending)<\/li><li><strong>&#8220;R=dnslookup&#8221;<\/strong> means Exim is performing DNS-based routing<\/li><li><strong>&#8220;T=remote_smtp&#8221;<\/strong> confirms it&#8217;s attempting delivery via SMTP<\/li><\/ul>\n\n\n\n<p>A typical deferral looks like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>2026-05-17 14:32:10 1RqABC-0000xyz-12 ** user@remote.com\nR=dnslookup T=remote_smtp H=mx.remote.com [203.0.113.5]\nX=TLS1.3: deferred: 452 4.2.2 mailbox full<\/code><\/pre>\n\n\n\n<p>The error message (after the colon following &#8220;deferred&#8221;) tells you exactly why the remote server rejected delivery.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verifying DNS Records for Email Authentication<\/h2>\n\n\n\n<p>Email authentication records \u2014 SPF, DKIM, and DMARC \u2014 are the primary reason legitimate emails end up in spam folders. This section focuses specifically on verification and troubleshooting these records.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Testing SPF Records<\/h3>\n\n\n\n<p>An SPF record tells receiving servers which IP addresses are authorized to send mail for your domain. A misconfigured or missing SPF record is the single most common cause of email delivery problems.<\/p>\n\n\n\n<p>Use the dig command to verify your SPF record:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dig TXT yourdomain.com +short<\/code><\/pre>\n\n\n\n<p>Look for a line starting with <code>v=spf1<\/code>. A valid cPanel SPF record typically looks like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"v=spf1 +a +mx +ip4:192.0.2.10 ~all\"<\/code><\/pre>\n\n\n\n<p>Common SPF issues include:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Missing include statements<\/strong> when using third-party senders (e.g., <code>include:_spf.google.com<\/code> for Google Workspace).<\/li><li><strong>Too many DNS lookups<\/strong> (SPF has a hard limit of 10 DNS lookups). Use <code>v=spf1 redirect=_spf.yourdomain.com<\/code> to consolidate.<\/li><li><strong>Using -all (hard fail)<\/strong> before confirming all senders are listed. Start with <code>~all<\/code> (soft fail) during testing.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Verifying DKIM Signatures<\/h3>\n\n\n\n<p>DKIM adds a cryptographic signature to outgoing messages. Receiving servers verify the signature against a public key published in your DNS.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>In cPanel, navigate to <strong>Email Deliverability<\/strong>.<\/li><li>Search for your domain in the list.<\/li><li>Click <strong>Manage<\/strong> next to your domain and verify that <strong>DKIM<\/strong> shows as &#8220;Enabled.&#8221;<\/li><\/ol>\n\n\n\n<p>To verify the DNS record is published correctly:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dig TXT default._domainkey.yourdomain.com +short<\/code><\/pre>\n\n\n\n<p>You should see a long string starting with <code>v=DKIM1; k=rsa; p=<\/code>. If this record is missing:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Return to <strong>Email Deliverability<\/strong> in cPanel.<\/li><li>Click your domain and then <strong>Enable<\/strong> under DKIM.<\/li><li>Click <strong>Install\/Reinstall<\/strong> to publish the DNS record automatically (assuming cPanel can manage your DNS zone).<\/li><\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Checking DMARC Policies<\/h3>\n\n\n\n<p>DMARC tells receiving servers what to do when SPF or DKIM checks fail. A missing DMARC record won&#8217;t break delivery, but it means you have no insight into authentication failures.<\/p>\n\n\n\n<p>To check your DMARC record:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dig TXT _dmarc.yourdomain.com +short<\/code><\/pre>\n\n\n\n<p>A minimal DMARC record looks like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\"v=DMARC1; p=none; rua=mailto:dmarc-reports@yourdomain.com\"<\/code><\/pre>\n\n\n\n<p>The <code>p=none<\/code> policy is safe for monitoring. Only move to <code>p=quarantine<\/code> or <code>p=reject<\/code> after confirming SPF and DKIM are working correctly.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Using SMTP Debugging and Telnet for Manual Testing<\/h2>\n\n\n\n<p>When automated diagnostics don&#8217;t reveal the problem, testing SMTP communication directly can provide answers that logs and DNS checks miss.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Testing SMTP Connection<\/h3>\n\n\n\n<p>From the command line, you can simulate an SMTP session with a remote mail server:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>telnet mx.remote.com 25<\/code><\/pre>\n\n\n\n<p>After connecting, you should see the remote server&#8217;s banner. Then you can manually issue SMTP commands:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>EHLO yourserver.com\nMAIL FROM: &lt;sender@yourdomain.com&gt;\nRCPT TO: &lt;recipient@remote.com&gt;\nDATA\nSubject: Test message\n\nThis is a test.\n.\nQUIT<\/code><\/pre>\n\n\n\n<p>Each command returns a three-digit SMTP response code. Codes starting with 2 indicate success, 3 indicate more input needed, 4 indicate temporary failures, and 5 indicate permanent failures. A <code>554 5.7.1 Relay access denied<\/code> error, for example, means the remote server is explicitly refusing your connection.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Checking Port Availability<\/h3>\n\n\n\n<p>Some ISPs and cloud hosting providers block port 25 outbound to fight spam. If you&#8217;re getting timeouts on port 25, test alternative submission ports:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>telnet mx.remote.com 587<\/code><\/pre>\n\n\n\n<p>or<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>telnet mx.remote.com 465<\/code><\/pre>\n\n\n\n<p>If port 25 is blocked by your hosting provider, you may need to configure Exim to route outgoing mail through a smart host (SMTP relay).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Common Email Delivery Issues and Their Fixes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Messages Deferred with &#8220;Helo Command Rejected&#8221;<\/h3>\n\n\n\n<p>This error means the remote server rejected your server&#8217;s HELO\/EHLO greeting because it doesn&#8217;t match the server&#8217;s reverse DNS (PTR record).<\/p>\n\n\n\n<p><strong>Fix:<\/strong> Ensure your server&#8217;s hostname has a matching PTR record. Check your current PTR:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dig -x $(curl -s ifconfig.me)<\/code><\/pre>\n\n\n\n<p>If the PTR doesn&#8217;t match your server&#8217;s hostname, contact your hosting provider or data center to update the reverse DNS record.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">&#8220;535 Authentication Failed&#8221; in Logs<\/h3>\n\n\n\n<p>This appears when a mail client or script tries to authenticate with incorrect credentials.<\/p>\n\n\n\n<p><strong>Fix:<\/strong> Reset the email account password in cPanel under <strong>Email Accounts<\/strong>. If using a script (e.g., PHP&#8217;s mail() or a contact form), verify that SMTP authentication credentials in the script are correct.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">&#8220;550 5.1.1 Recipient Rejected&#8221;<\/h3>\n\n\n\n<p>The remote mail server reports that the recipient address doesn&#8217;t exist. This is often correct for typos, but if you&#8217;re sure the address is valid, the remote server might have its own delivery restrictions.<\/p>\n\n\n\n<p><strong>Fix:<\/strong> Double-check the recipient address, and consider verifying the address directly with the recipient&#8217;s IT team or using a web-based email testing tool.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Email Going to Spam Despite Correct SPF and DKIM<\/h3>\n\n\n\n<p>If SPF and DKIM both pass but messages still land in spam, the issue is typically content reputation, sending IP reputation, or DMARC policy.<\/p>\n\n\n\n<p><strong>Fix:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Check your sending IP against blacklists using <code>dig -x YOUR_IP +short<\/code> or an online blacklist check tool.<\/li><li>Ensure your DMARC policy is <code>p=none<\/code> while you monitor reports.<\/li><li>Warm up new sending IPs by gradually increasing email volume from a clean IP.<\/li><li>Avoid spammy content characteristics: excessive links, all-caps subject lines, and misleading headers.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Key Takeaways<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>The cPanel Mail Delivery Manager provides a graphical interface for viewing queued messages and delivery histories, making it the first stop for any email troubleshooting.<\/li><li>Exim logs at <code>\/var\/log\/exim_mainlog<\/code> contain granular delivery status indicators including deferrals (&#8220;**&#8221;), successful deliveries (&#8220;=>&#8221;), and permanent failures (&#8220;==&#8221;).<\/li><li>DNS verification of SPF, DKIM, and DMARC records using dig commands can resolve most authentication-related delivery problems without needing to touch the mail server itself.<\/li><li>Manual SMTP testing via telnet on ports 25, 587, and 465 helps isolate network-level issues like port blocking and reverse DNS mismatches.<\/li><li>Reverse DNS (PTR records), sending IP reputation, and DMARC policy monitoring are critical factors that go beyond basic SPF and DKIM configuration.<\/li><li>When all else fails, thawing frozen messages and checking for blacklist inclusion provides additional diagnostic data that can guide the final fix.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Learn how to diagnose and fix email delivery problems in cPanel using Exim logs, mail queue tools, SPF\/DKIM\/DMARC verification, and SMTP debugging.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[39],"tags":[49,212,213,214,215],"class_list":["post-80","post","type-post","status-publish","format-standard","hentry","category-email-configuration","tag-cpanel-email-troubleshooting","tag-email-authentication-dns","tag-email-delivery-issues","tag-exim-logs-cpanel","tag-smtp-debugging-cpanel"],"_links":{"self":[{"href":"https:\/\/cpanelreview.com\/index.php\/wp-json\/wp\/v2\/posts\/80","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cpanelreview.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cpanelreview.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cpanelreview.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cpanelreview.com\/index.php\/wp-json\/wp\/v2\/comments?post=80"}],"version-history":[{"count":0,"href":"https:\/\/cpanelreview.com\/index.php\/wp-json\/wp\/v2\/posts\/80\/revisions"}],"wp:attachment":[{"href":"https:\/\/cpanelreview.com\/index.php\/wp-json\/wp\/v2\/media?parent=80"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cpanelreview.com\/index.php\/wp-json\/wp\/v2\/categories?post=80"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cpanelreview.com\/index.php\/wp-json\/wp\/v2\/tags?post=80"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}