<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[AdminsForum - aaPanel Mail Server Guides]]></title>
		<link>https://adminsforum.com/</link>
		<description><![CDATA[AdminsForum - https://adminsforum.com]]></description>
		<pubDate>Thu, 15 Oct 2026 05:22:24 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Back Up aaPanel Mail Server and Verify the Backup]]></title>
			<link>https://adminsforum.com/Thread-guide-back-up-aapanel-mail-server-and-verify-the-backup</link>
			<pubDate>Mon, 12 Oct 2026 01:39:42 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-back-up-aapanel-mail-server-and-verify-the-backup</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">What this guide does</span><br />
Create a backup plan for aaPanel Mail Server, run it immediately, and check that an archive was actually produced. This protects mailbox messages before maintenance or migration.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested on the AdminsForum lab</span><br />
aaPanel 8.0.6 on Ubuntu, with Mail Server installed. We saved a weekly plan, ran the task once, and verified the completed archive. We did not restore over existing mailboxes. Screenshots below show the actual lab result.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Before you begin</span><ul class="mycode_list"><li>Sign in to aaPanel as an administrator and confirm that Mail Server is installed.<br />
</li>
<li>Check free disk space. Allow room for the existing mail data, a temporary archive, and retained backups.<br />
</li>
<li>Decide how much mail you can afford to lose. A weekly backup can leave up to a week of new messages unprotected; busy mailboxes usually need more frequent backups.<br />
</li>
<li>Keep a second copy on another server or storage account. A backup on the same disk cannot protect you from losing that VPS or disk.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">1. Open the mail backup page</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Mail Server → Other Settings → Backup</span>. This is the Mail Server backup page, not the website backup page. Look for <span style="font-weight: bold;" class="mycode_b">Backup Plan</span>, <span style="font-weight: bold;" class="mycode_b">Open Backup</span>, the schedule fields and <span style="font-weight: bold;" class="mycode_b">Mail import</span>.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Choose the schedule and retention</span><br />
Turn on <span style="font-weight: bold;" class="mycode_b">Open Backup</span>. For the lab demonstration we selected:<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Period:</span> Weekly.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Day:</span> Monday.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Time:</span> 01:30, using the server's schedule/time settings.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Backup to:</span> Disk of server.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Keep last:</span> 3 copies.<br />
</li>
</ul>
Click <span style="font-weight: bold;" class="mycode_b">Save</span>, wait for saving to finish, then return to the page to check the values persisted. Choose your own schedule; these demonstration values are not a recommended minimum for every mailbox.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">AdminsForum lab screenshot — saved plan and the generated archive</span><br />
<img src="https://adminsforum.com/images/tutorials/mail-backup-result-20261011.png?v=copyright1" loading="lazy"  alt="[Image: mail-backup-result-20261011.png?v=copyright1]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Run a backup now</span><br />
Open <span style="font-weight: bold;" class="mycode_b">Cron</span> from the left menu. Find <span style="font-weight: bold;" class="mycode_b">[Do not delete] Mail server data backup task</span>. Check its destination, retention and execution cycle. Click <span style="font-weight: bold;" class="mycode_b">Execute</span> in that row, then confirm. This starts a real backup immediately; you do not need to wait until the next scheduled time.<br />
<br />
Wait for completion. The word <span style="font-weight: bold;" class="mycode_b">Running</span> in the task list indicates the task is enabled; it is not proof that a backup completed successfully.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Read the backup log</span><br />
Open the task's <span style="font-weight: bold;" class="mycode_b">Log</span>. Look for the source directory, available disk space, compression result, destination filename, and a completion message. Our lab log reported:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>Backup directory: /www/vmail
Directory size: 213.22 KB
Compressed archive: 13.05 KB
Saved under: /www/backup/path/vmail/
Backup is complete</code></div></div>These sizes are examples from a small lab mailbox. Your sizes will differ. A log reporting an error, an empty output file, or only a start time is not a successful backup.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">AdminsForum lab screenshot — successful execution log</span><br />
<img src="https://adminsforum.com/images/tutorials/mail-backup-log-20261011.png?v=copyright1" loading="lazy"  alt="[Image: mail-backup-log-20261011.png?v=copyright1]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Check and keep an off-server copy</span><br />
Return to <span style="font-weight: bold;" class="mycode_b">Mail Server → Other Settings → Backup</span>. In our tested version the generated archive appeared under <span style="font-weight: bold;" class="mycode_b">Mail import</span>, with <span style="font-weight: bold;" class="mycode_b">Restore</span> and <span style="font-weight: bold;" class="mycode_b">Delete</span> actions. Check its timestamp and filename against the task log.<br />
<br />
Use aaPanel <span style="font-weight: bold;" class="mycode_b">Files</span> to open the exact directory shown in your log. Download the archive to secure storage outside the VPS. Backups contain private email, so do not put them in a public website directory or attach them to a forum post. Check that the downloaded file has a sensible size and can be opened/listed as an archive.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">What is covered?</span><br />
The backup task in this demonstration archived <span style="font-weight: bold;" class="mycode_b">/www/vmail</span>. This is not evidence of a full-server backup. Separately record or back up your mailbox/domain configuration, mail service settings, DNS records, certificates and other required recovery material. Do not assume a mail-data archive alone can recreate every part of a new server.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Understand the recovery controls</span><br />
The page provides <span style="font-weight: bold;" class="mycode_b">Upload from local</span> and <span style="font-weight: bold;" class="mycode_b">Select in server</span> for importing a backup, and a <span style="font-weight: bold;" class="mycode_b">Restore</span> action for the listed archive. Before using them, keep a current backup and test on a separate disposable server. Confirm that the target has compatible Mail Server software and the correct mailbox/domain setup. Importing old mail into live accounts can affect existing data; this guide does not claim a completed restore test.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Stop a demonstration schedule</span><br />
If you only created the schedule for practice, return to the Mail Server backup page, turn off <span style="font-weight: bold;" class="mycode_b">Open Backup</span> and save. Check the corresponding Cron task is paused. Keep the successful archive. On our lab we disabled the temporary plan after testing.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Common problems</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">No archive appears:</span> run the correct mail backup task and inspect its log; saving a plan does not immediately create a backup.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Disk full or inode error:</span> free space safely or move verified old backups off-server before trying again.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Backup exists but messages are missing after recovery:</span> check the backup date, mailbox mapping and recovery log. Do not overwrite your only copy while experimenting.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Different time in the UI and log:</span> check server and browser timezone settings; compare the actual file timestamp as well.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Verification checklist</span><ul class="mycode_list"><li>Backup settings persisted after saving.<br />
</li>
<li>The correct task executed and its log ended successfully.<br />
</li>
<li>A timestamped, non-empty archive exists.<br />
</li>
<li>An off-server copy is secured.<br />
</li>
<li>A separate recovery rehearsal is planned before relying on the backup.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Reference:</span> <a href="https://www.aapanel.com/docs/Function/MailServer.html" target="_blank" rel="noopener" class="mycode_url">aaPanel Mail Server documentation</a>. Labels may differ between versions. For help, post your aaPanel version and the relevant error lines in Support &amp; Troubleshooting; remove mailbox contents and credentials first.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">What this guide does</span><br />
Create a backup plan for aaPanel Mail Server, run it immediately, and check that an archive was actually produced. This protects mailbox messages before maintenance or migration.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested on the AdminsForum lab</span><br />
aaPanel 8.0.6 on Ubuntu, with Mail Server installed. We saved a weekly plan, ran the task once, and verified the completed archive. We did not restore over existing mailboxes. Screenshots below show the actual lab result.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Before you begin</span><ul class="mycode_list"><li>Sign in to aaPanel as an administrator and confirm that Mail Server is installed.<br />
</li>
<li>Check free disk space. Allow room for the existing mail data, a temporary archive, and retained backups.<br />
</li>
<li>Decide how much mail you can afford to lose. A weekly backup can leave up to a week of new messages unprotected; busy mailboxes usually need more frequent backups.<br />
</li>
<li>Keep a second copy on another server or storage account. A backup on the same disk cannot protect you from losing that VPS or disk.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">1. Open the mail backup page</span><br />
Click <span style="font-weight: bold;" class="mycode_b">Mail Server → Other Settings → Backup</span>. This is the Mail Server backup page, not the website backup page. Look for <span style="font-weight: bold;" class="mycode_b">Backup Plan</span>, <span style="font-weight: bold;" class="mycode_b">Open Backup</span>, the schedule fields and <span style="font-weight: bold;" class="mycode_b">Mail import</span>.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. Choose the schedule and retention</span><br />
Turn on <span style="font-weight: bold;" class="mycode_b">Open Backup</span>. For the lab demonstration we selected:<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Period:</span> Weekly.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Day:</span> Monday.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Time:</span> 01:30, using the server's schedule/time settings.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Backup to:</span> Disk of server.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Keep last:</span> 3 copies.<br />
</li>
</ul>
Click <span style="font-weight: bold;" class="mycode_b">Save</span>, wait for saving to finish, then return to the page to check the values persisted. Choose your own schedule; these demonstration values are not a recommended minimum for every mailbox.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">AdminsForum lab screenshot — saved plan and the generated archive</span><br />
<img src="https://adminsforum.com/images/tutorials/mail-backup-result-20261011.png?v=copyright1" loading="lazy"  alt="[Image: mail-backup-result-20261011.png?v=copyright1]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Run a backup now</span><br />
Open <span style="font-weight: bold;" class="mycode_b">Cron</span> from the left menu. Find <span style="font-weight: bold;" class="mycode_b">[Do not delete] Mail server data backup task</span>. Check its destination, retention and execution cycle. Click <span style="font-weight: bold;" class="mycode_b">Execute</span> in that row, then confirm. This starts a real backup immediately; you do not need to wait until the next scheduled time.<br />
<br />
Wait for completion. The word <span style="font-weight: bold;" class="mycode_b">Running</span> in the task list indicates the task is enabled; it is not proof that a backup completed successfully.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Read the backup log</span><br />
Open the task's <span style="font-weight: bold;" class="mycode_b">Log</span>. Look for the source directory, available disk space, compression result, destination filename, and a completion message. Our lab log reported:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>Backup directory: /www/vmail
Directory size: 213.22 KB
Compressed archive: 13.05 KB
Saved under: /www/backup/path/vmail/
Backup is complete</code></div></div>These sizes are examples from a small lab mailbox. Your sizes will differ. A log reporting an error, an empty output file, or only a start time is not a successful backup.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">AdminsForum lab screenshot — successful execution log</span><br />
<img src="https://adminsforum.com/images/tutorials/mail-backup-log-20261011.png?v=copyright1" loading="lazy"  alt="[Image: mail-backup-log-20261011.png?v=copyright1]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Check and keep an off-server copy</span><br />
Return to <span style="font-weight: bold;" class="mycode_b">Mail Server → Other Settings → Backup</span>. In our tested version the generated archive appeared under <span style="font-weight: bold;" class="mycode_b">Mail import</span>, with <span style="font-weight: bold;" class="mycode_b">Restore</span> and <span style="font-weight: bold;" class="mycode_b">Delete</span> actions. Check its timestamp and filename against the task log.<br />
<br />
Use aaPanel <span style="font-weight: bold;" class="mycode_b">Files</span> to open the exact directory shown in your log. Download the archive to secure storage outside the VPS. Backups contain private email, so do not put them in a public website directory or attach them to a forum post. Check that the downloaded file has a sensible size and can be opened/listed as an archive.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">What is covered?</span><br />
The backup task in this demonstration archived <span style="font-weight: bold;" class="mycode_b">/www/vmail</span>. This is not evidence of a full-server backup. Separately record or back up your mailbox/domain configuration, mail service settings, DNS records, certificates and other required recovery material. Do not assume a mail-data archive alone can recreate every part of a new server.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">6. Understand the recovery controls</span><br />
The page provides <span style="font-weight: bold;" class="mycode_b">Upload from local</span> and <span style="font-weight: bold;" class="mycode_b">Select in server</span> for importing a backup, and a <span style="font-weight: bold;" class="mycode_b">Restore</span> action for the listed archive. Before using them, keep a current backup and test on a separate disposable server. Confirm that the target has compatible Mail Server software and the correct mailbox/domain setup. Importing old mail into live accounts can affect existing data; this guide does not claim a completed restore test.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">7. Stop a demonstration schedule</span><br />
If you only created the schedule for practice, return to the Mail Server backup page, turn off <span style="font-weight: bold;" class="mycode_b">Open Backup</span> and save. Check the corresponding Cron task is paused. Keep the successful archive. On our lab we disabled the temporary plan after testing.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Common problems</span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">No archive appears:</span> run the correct mail backup task and inspect its log; saving a plan does not immediately create a backup.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Disk full or inode error:</span> free space safely or move verified old backups off-server before trying again.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Backup exists but messages are missing after recovery:</span> check the backup date, mailbox mapping and recovery log. Do not overwrite your only copy while experimenting.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Different time in the UI and log:</span> check server and browser timezone settings; compare the actual file timestamp as well.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Verification checklist</span><ul class="mycode_list"><li>Backup settings persisted after saving.<br />
</li>
<li>The correct task executed and its log ended successfully.<br />
</li>
<li>A timestamped, non-empty archive exists.<br />
</li>
<li>An off-server copy is secured.<br />
</li>
<li>A separate recovery rehearsal is planned before relying on the backup.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Reference:</span> <a href="https://www.aapanel.com/docs/Function/MailServer.html" target="_blank" rel="noopener" class="mycode_url">aaPanel Mail Server documentation</a>. Labels may differ between versions. For help, post your aaPanel version and the relevant error lines in Support &amp; Troubleshooting; remove mailbox contents and credentials first.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Check Mail Logs and Queue in aaPanel Free Edition]]></title>
			<link>https://adminsforum.com/Thread-guide-check-mail-logs-and-queue-in-aapanel-free-edition</link>
			<pubDate>Sun, 11 Oct 2026 20:27:43 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-check-mail-logs-and-queue-in-aapanel-free-edition</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">A message in Sent confirms client submission, not final delivery. Check the mail service, queue and recipient-specific log entry to find where delivery stopped.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested Ubuntu lab:</span> aaPanel Free Edition 8.0.6, Mail Server 7.4.1. Postfix and Dovecot were active, /var/log/mail.log existed, and postqueue -p reported Mail queue is empty. Earlier forwarding tests recorded the original alias and successful local delivery. We did not create a deliberate external rejection for this guide.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Record the failing message</span></span><br />
Write down the sending account, complete recipient address, send time and timezone, unique subject, and exact client error. Determine whether Send failed immediately or the message appeared in Sent. Use a single controlled test, rather than repeatedly sending the same message.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Check service status in aaPanel</span></span><br />
Open <span style="font-weight: bold;" class="mycode_b">Mail Server → Other Settings → Common settings</span> and find Service Status. Our screen showed Dovecot, Rspamd and Postfix Running. Postfix handles SMTP transport; Dovecot provides mailbox access and can handle local delivery. A Running label does not establish that every message reached a remote inbox.<br />
<br />
The same table contains Stop, Restart, Repair and Config controls. Read the error first. Repeated restarts can interrupt clients without fixing DNS, blocked outbound traffic or recipient rejection.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Read the queue on Ubuntu</span></span><br />
In an authorized server terminal, run this read-only command:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>postqueue -p</code></div></div>An empty queue means no mail is currently queued in this Postfix instance. It does not prove that every earlier message was delivered: an earlier message could have bounced, been removed or already left the queue.<br />
<br />
When entries exist, identify the queue ID, recipient and displayed delay reason. A deferred message is pending for retry. Preserve the reason before changing anything. Do not empty the entire queue to troubleshoot one message.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Follow the matching log entry</span></span><br />
For our Ubuntu installation:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>tail -n 100 /var/log/mail.log
journalctl -u postfix -u dovecot --since '30 minutes ago' --no-pager</code></div></div>The file path was verified in this lab. Other operating systems or logging configurations may use a different location. If a command returns no useful entries, check the logging configuration and time window; do not invent a successful result.<br />
<br />
Search for the recipient and queue ID. One message can create several lines. Follow the same ID through submission, delivery attempt and final status. Logs may contain private addresses and message details; remove unrelated information before sharing excerpts publicly.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Interpret the delivery result</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">status=sent:</span> the selected destination accepted that delivery. For a remote server, read its response; acceptance does not guarantee Inbox placement.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">status=deferred:</span> delivery remains pending. Read the accompanying timeout, DNS or temporary rejection reason.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">status=bounced:</span> permanent failure was reported. Read the remote explanation and any returned delivery-status message.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Authentication failure:</span> inspect the client username, password and account status before diagnosing remote delivery.<br />
</li>
</ul>
Temporary SMTP responses generally begin with 4; permanent negative responses generally begin with 5. Diagnose the full text, not just the number.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">6. Fix the cause and retest</span></span><br />
For DNS errors, verify MX and its target. For connection timeouts, check provider port restrictions and network reachability. For authentication or reputation failures, verify SPF, DKIM, DMARC and PTR. Change one relevant setting at a time and send another unique test.<br />
<br />
<img src="https://adminsforum.com/uploads/tutorials/mail-seostack-branded-20261011.png" loading="lazy"  alt="[Image: mail-seostack-branded-20261011.png]" class="mycode_img" /><br />
<span style="font-weight: bold;" class="mycode_b">External check:</span> our completed SEOStackTools test scored 95/100. It complements logs; it does not report the status of every message.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Continue:</span> <a href="https://adminsforum.com/Thread-guide-fix-reverse-dns-and-test-email-delivery" target="_blank" rel="noopener" class="mycode_url">Reverse DNS and SEOStackTools delivery testing</a>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">A message in Sent confirms client submission, not final delivery. Check the mail service, queue and recipient-specific log entry to find where delivery stopped.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested Ubuntu lab:</span> aaPanel Free Edition 8.0.6, Mail Server 7.4.1. Postfix and Dovecot were active, /var/log/mail.log existed, and postqueue -p reported Mail queue is empty. Earlier forwarding tests recorded the original alias and successful local delivery. We did not create a deliberate external rejection for this guide.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Record the failing message</span></span><br />
Write down the sending account, complete recipient address, send time and timezone, unique subject, and exact client error. Determine whether Send failed immediately or the message appeared in Sent. Use a single controlled test, rather than repeatedly sending the same message.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Check service status in aaPanel</span></span><br />
Open <span style="font-weight: bold;" class="mycode_b">Mail Server → Other Settings → Common settings</span> and find Service Status. Our screen showed Dovecot, Rspamd and Postfix Running. Postfix handles SMTP transport; Dovecot provides mailbox access and can handle local delivery. A Running label does not establish that every message reached a remote inbox.<br />
<br />
The same table contains Stop, Restart, Repair and Config controls. Read the error first. Repeated restarts can interrupt clients without fixing DNS, blocked outbound traffic or recipient rejection.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Read the queue on Ubuntu</span></span><br />
In an authorized server terminal, run this read-only command:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>postqueue -p</code></div></div>An empty queue means no mail is currently queued in this Postfix instance. It does not prove that every earlier message was delivered: an earlier message could have bounced, been removed or already left the queue.<br />
<br />
When entries exist, identify the queue ID, recipient and displayed delay reason. A deferred message is pending for retry. Preserve the reason before changing anything. Do not empty the entire queue to troubleshoot one message.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Follow the matching log entry</span></span><br />
For our Ubuntu installation:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>tail -n 100 /var/log/mail.log
journalctl -u postfix -u dovecot --since '30 minutes ago' --no-pager</code></div></div>The file path was verified in this lab. Other operating systems or logging configurations may use a different location. If a command returns no useful entries, check the logging configuration and time window; do not invent a successful result.<br />
<br />
Search for the recipient and queue ID. One message can create several lines. Follow the same ID through submission, delivery attempt and final status. Logs may contain private addresses and message details; remove unrelated information before sharing excerpts publicly.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Interpret the delivery result</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">status=sent:</span> the selected destination accepted that delivery. For a remote server, read its response; acceptance does not guarantee Inbox placement.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">status=deferred:</span> delivery remains pending. Read the accompanying timeout, DNS or temporary rejection reason.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">status=bounced:</span> permanent failure was reported. Read the remote explanation and any returned delivery-status message.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Authentication failure:</span> inspect the client username, password and account status before diagnosing remote delivery.<br />
</li>
</ul>
Temporary SMTP responses generally begin with 4; permanent negative responses generally begin with 5. Diagnose the full text, not just the number.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">6. Fix the cause and retest</span></span><br />
For DNS errors, verify MX and its target. For connection timeouts, check provider port restrictions and network reachability. For authentication or reputation failures, verify SPF, DKIM, DMARC and PTR. Change one relevant setting at a time and send another unique test.<br />
<br />
<img src="https://adminsforum.com/uploads/tutorials/mail-seostack-branded-20261011.png" loading="lazy"  alt="[Image: mail-seostack-branded-20261011.png]" class="mycode_img" /><br />
<span style="font-weight: bold;" class="mycode_b">External check:</span> our completed SEOStackTools test scored 95/100. It complements logs; it does not report the status of every message.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Continue:</span> <a href="https://adminsforum.com/Thread-guide-fix-reverse-dns-and-test-email-delivery" target="_blank" rel="noopener" class="mycode_url">Reverse DNS and SEOStackTools delivery testing</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Configure IMAP and SMTP for aaPanel Free Edition]]></title>
			<link>https://adminsforum.com/Thread-guide-configure-imap-and-smtp-for-aapanel-free-edition</link>
			<pubDate>Sun, 11 Oct 2026 20:26:29 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-configure-imap-and-smtp-for-aapanel-free-edition</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Use IMAP for reading email and authenticated SMTP for sending it. Both connections need the full mailbox address and a certificate matching the mail hostname.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lab verification:</span> mail.adminslab.com presented a trusted matching certificate on IMAP 993 and SMTP STARTTLS 587. Roundcube successfully accessed the mailbox and sent mail. This guide gives manual connection values for an email client; a specific Outlook or Thunderbird desktop installation has not been tested here.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Prepare the mailbox and hostname</span></span><br />
Complete mail-domain DNS, mailbox creation and mail-service SSL first. Your mail hostname should resolve directly to the mail VPS. For Cloudflare, keep the mail A record DNS only. The webmail website address and aaPanel administration port are different services.<br />
<br />
Open <span style="font-weight: bold;" class="mycode_b">Mail Server → Mailboxes</span>. Locate the account and confirm Status is enabled. The Login info column has a Copy link in our tested version. Treat copied login details as private: they can include the mailbox password. Do not paste them into a public support post.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Enter incoming IMAP settings</span></span><br />
Choose manual configuration in your client and use:<ul class="mycode_list"><li>Protocol: IMAP<br />
</li>
<li>Server: your certificate-covered mail hostname, for example mail.example.com<br />
</li>
<li>Port: 993<br />
</li>
<li>Connection security: SSL/TLS<br />
</li>
<li>Username: full mailbox address, for example admin@example.com<br />
</li>
<li>Password: that mailbox's password<br />
</li>
</ul>
Choose the client's ordinary password authentication over the encrypted connection. Do not use the VPS root password, panel credentials or aaPanel.com account.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Enter outgoing SMTP settings</span></span><ul class="mycode_list"><li>Server: the same verified mail hostname<br />
</li>
<li>Port: 587<br />
</li>
<li>Connection security: STARTTLS<br />
</li>
<li>Authentication: required, using the mailbox username and password<br />
</li>
</ul>
STARTTLS upgrades this SMTP connection to encryption; it is not the same setting as implicit SSL/TLS on port 465. Use 465 only when your own configuration confirms that endpoint is enabled. Port 25 is principally used for server-to-server delivery and is not the recommended authenticated client setting here.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Test both directions</span></span><br />
Finish setup, open Inbox and compare a known message with webmail. Send a unique-subject test to an address you control. Check Sent and the actual recipient's Inbox and Junk. Reply from the external recipient and verify the response arrives. This last step checks external inbound delivery; that direction still needs a separate real-provider test in our lab.<br />
<br />
<img src="https://adminsforum.com/uploads/tutorials/mail-webmail-branded-20261011.png" loading="lazy"  alt="[Image: mail-webmail-branded-20261011.png]" class="mycode_img" /><br />
<span style="font-weight: bold;" class="mycode_b">Reference:</span> our working Roundcube mailbox. This image shows webmail, not desktop-client setup screens.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Troubleshoot by symptom</span></span><ul class="mycode_list"><li>Certificate mismatch: use the certificate-covered hostname and check mail-service SSL deployment. Do not accept a mismatched certificate as the normal fix.<br />
</li>
<li>Connection timeout: verify DNS, the intended port and both VPS/provider firewall rules.<br />
</li>
<li>Login rejected: check the full address, mailbox password and enabled Status.<br />
</li>
<li>Can read but cannot send: check SMTP authentication and STARTTLS 587 rather than changing IMAP settings.<br />
</li>
<li>Message appears in Sent but not at the recipient: inspect delivery logs and the queue.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">References:</span> <a href="https://www.aapanel.com/docs/Function/MailServer-basics.html" target="_blank" rel="noopener" class="mycode_url">aaPanel mail protocol and port documentation</a> · <a href="https://adminsforum.com/Thread-guide-install-ssl-for-aapanel-mail-server" target="_blank" rel="noopener" class="mycode_url">Mail-service SSL guide</a>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Use IMAP for reading email and authenticated SMTP for sending it. Both connections need the full mailbox address and a certificate matching the mail hostname.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lab verification:</span> mail.adminslab.com presented a trusted matching certificate on IMAP 993 and SMTP STARTTLS 587. Roundcube successfully accessed the mailbox and sent mail. This guide gives manual connection values for an email client; a specific Outlook or Thunderbird desktop installation has not been tested here.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Prepare the mailbox and hostname</span></span><br />
Complete mail-domain DNS, mailbox creation and mail-service SSL first. Your mail hostname should resolve directly to the mail VPS. For Cloudflare, keep the mail A record DNS only. The webmail website address and aaPanel administration port are different services.<br />
<br />
Open <span style="font-weight: bold;" class="mycode_b">Mail Server → Mailboxes</span>. Locate the account and confirm Status is enabled. The Login info column has a Copy link in our tested version. Treat copied login details as private: they can include the mailbox password. Do not paste them into a public support post.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Enter incoming IMAP settings</span></span><br />
Choose manual configuration in your client and use:<ul class="mycode_list"><li>Protocol: IMAP<br />
</li>
<li>Server: your certificate-covered mail hostname, for example mail.example.com<br />
</li>
<li>Port: 993<br />
</li>
<li>Connection security: SSL/TLS<br />
</li>
<li>Username: full mailbox address, for example admin@example.com<br />
</li>
<li>Password: that mailbox's password<br />
</li>
</ul>
Choose the client's ordinary password authentication over the encrypted connection. Do not use the VPS root password, panel credentials or aaPanel.com account.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Enter outgoing SMTP settings</span></span><ul class="mycode_list"><li>Server: the same verified mail hostname<br />
</li>
<li>Port: 587<br />
</li>
<li>Connection security: STARTTLS<br />
</li>
<li>Authentication: required, using the mailbox username and password<br />
</li>
</ul>
STARTTLS upgrades this SMTP connection to encryption; it is not the same setting as implicit SSL/TLS on port 465. Use 465 only when your own configuration confirms that endpoint is enabled. Port 25 is principally used for server-to-server delivery and is not the recommended authenticated client setting here.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Test both directions</span></span><br />
Finish setup, open Inbox and compare a known message with webmail. Send a unique-subject test to an address you control. Check Sent and the actual recipient's Inbox and Junk. Reply from the external recipient and verify the response arrives. This last step checks external inbound delivery; that direction still needs a separate real-provider test in our lab.<br />
<br />
<img src="https://adminsforum.com/uploads/tutorials/mail-webmail-branded-20261011.png" loading="lazy"  alt="[Image: mail-webmail-branded-20261011.png]" class="mycode_img" /><br />
<span style="font-weight: bold;" class="mycode_b">Reference:</span> our working Roundcube mailbox. This image shows webmail, not desktop-client setup screens.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Troubleshoot by symptom</span></span><ul class="mycode_list"><li>Certificate mismatch: use the certificate-covered hostname and check mail-service SSL deployment. Do not accept a mismatched certificate as the normal fix.<br />
</li>
<li>Connection timeout: verify DNS, the intended port and both VPS/provider firewall rules.<br />
</li>
<li>Login rejected: check the full address, mailbox password and enabled Status.<br />
</li>
<li>Can read but cannot send: check SMTP authentication and STARTTLS 587 rather than changing IMAP settings.<br />
</li>
<li>Message appears in Sent but not at the recipient: inspect delivery logs and the queue.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">References:</span> <a href="https://www.aapanel.com/docs/Function/MailServer-basics.html" target="_blank" rel="noopener" class="mycode_url">aaPanel mail protocol and port documentation</a> · <a href="https://adminsforum.com/Thread-guide-install-ssl-for-aapanel-mail-server" target="_blank" rel="noopener" class="mycode_url">Mail-service SSL guide</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Change Mailbox Quota in aaPanel Free Edition]]></title>
			<link>https://adminsforum.com/Thread-guide-change-mailbox-quota-in-aapanel-free-edition</link>
			<pubDate>Sun, 11 Oct 2026 20:25:23 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-change-mailbox-quota-in-aapanel-free-edition</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Mailbox quota limits how much email one account can store. Increase it when more storage is needed, but check server disk space and the domain allowance first.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested:</span> aaPanel Free Edition 8.0.6 with Mail Server 7.4.1. We changed admin@adminslab.com from 1 GB to 2 GB, verified the mailbox row, and restored 1 GB afterward. The password and enabled status were unchanged.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Check the current allowance</span></span><br />
Open <span style="font-weight: bold;" class="mycode_b">Mail Server → Mailboxes</span>. Find the full email address, using Search Email if needed. Read its Quota column: our row changed from 0.00 B/1.00 GB to 0.00 B/2.00 GB. The first number is reported usage; the second is the limit. A rounded zero does not prove that the mailbox contains no messages.<br />
<br />
Also inspect <span style="font-weight: bold;" class="mycode_b">Mail Domain</span> for the domain quota and default mailbox size. These are separate settings. Raising one mailbox limit does not create additional disk capacity. Check Home disk usage or run <br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>df -h /</code></div></div> on Ubuntu. Our lab had 29 GB available during this test.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Edit one mailbox</span></span><br />
1. In the correct mailbox row, click <span style="font-weight: bold;" class="mycode_b">Edit</span>.<br />
2. Verify the dialog says Edit Mailbox and shows the intended Email Address.<br />
3. Keep <span style="font-weight: bold;" class="mycode_b">Quota limit</span> enabled.<br />
4. Enter the new amount in <span style="font-weight: bold;" class="mycode_b">Quota</span>, then confirm the adjacent unit. We entered 2 with GB selected.<br />
5. Keep the existing Name and User type unless those also need an intentional change.<br />
6. Leave <span style="font-weight: bold;" class="mycode_b">Email Password</span> empty. The dialog explicitly says an empty value leaves the password unchanged.<br />
7. Click <span style="font-weight: bold;" class="mycode_b">Confirm</span> once and wait for the mailbox list to update.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Verify the result</span></span><br />
Check the same row again. Its allowance should now show the requested value and Status should remain enabled. If the old value remains, reopen Edit and check whether the setting actually saved before trying again. Test normal mailbox access through webmail.<br />
<br />
<img src="https://adminsforum.com/uploads/tutorials/mail-quota-branded-20261011.png" loading="lazy"  alt="[Image: mail-quota-branded-20261011.png]" class="mycode_img" /><br />
<span style="font-weight: bold;" class="mycode_b">Screenshot:</span> the actual lab row after the successful 2 GB change. The lab was subsequently returned to 1 GB.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. If the mailbox is already full</span></span><br />
Increasing the allowance can help only when the underlying server has space. Review large attachments, Sent, Junk and Trash. Export or back up messages you need before permanent cleanup. Deleting a mailbox is not a quota adjustment: it can remove the account and its mail.<br />
<br />
Do not reduce the allowance below current usage as a routine cleanup method. First reduce stored mail or choose a sufficient limit, then verify delivery with a new message.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Check quota notifications</span></span><br />
Under <span style="font-weight: bold;" class="mycode_b">Mail Server → Other Settings → Common settings</span>, our panel showed <span style="font-weight: bold;" class="mycode_b">Send email when quota exceeded</span> enabled. Check your own setting and test the notification separately; we did not deliberately fill this mailbox or verify an over-quota alert.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Related:</span> <a href="https://adminsforum.com/Thread-guide-create-a-user-mailbox-in-aapanel-mail-server" target="_blank" rel="noopener" class="mycode_url">Create a user mailbox</a>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Mailbox quota limits how much email one account can store. Increase it when more storage is needed, but check server disk space and the domain allowance first.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested:</span> aaPanel Free Edition 8.0.6 with Mail Server 7.4.1. We changed admin@adminslab.com from 1 GB to 2 GB, verified the mailbox row, and restored 1 GB afterward. The password and enabled status were unchanged.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Check the current allowance</span></span><br />
Open <span style="font-weight: bold;" class="mycode_b">Mail Server → Mailboxes</span>. Find the full email address, using Search Email if needed. Read its Quota column: our row changed from 0.00 B/1.00 GB to 0.00 B/2.00 GB. The first number is reported usage; the second is the limit. A rounded zero does not prove that the mailbox contains no messages.<br />
<br />
Also inspect <span style="font-weight: bold;" class="mycode_b">Mail Domain</span> for the domain quota and default mailbox size. These are separate settings. Raising one mailbox limit does not create additional disk capacity. Check Home disk usage or run <br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>df -h /</code></div></div> on Ubuntu. Our lab had 29 GB available during this test.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Edit one mailbox</span></span><br />
1. In the correct mailbox row, click <span style="font-weight: bold;" class="mycode_b">Edit</span>.<br />
2. Verify the dialog says Edit Mailbox and shows the intended Email Address.<br />
3. Keep <span style="font-weight: bold;" class="mycode_b">Quota limit</span> enabled.<br />
4. Enter the new amount in <span style="font-weight: bold;" class="mycode_b">Quota</span>, then confirm the adjacent unit. We entered 2 with GB selected.<br />
5. Keep the existing Name and User type unless those also need an intentional change.<br />
6. Leave <span style="font-weight: bold;" class="mycode_b">Email Password</span> empty. The dialog explicitly says an empty value leaves the password unchanged.<br />
7. Click <span style="font-weight: bold;" class="mycode_b">Confirm</span> once and wait for the mailbox list to update.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Verify the result</span></span><br />
Check the same row again. Its allowance should now show the requested value and Status should remain enabled. If the old value remains, reopen Edit and check whether the setting actually saved before trying again. Test normal mailbox access through webmail.<br />
<br />
<img src="https://adminsforum.com/uploads/tutorials/mail-quota-branded-20261011.png" loading="lazy"  alt="[Image: mail-quota-branded-20261011.png]" class="mycode_img" /><br />
<span style="font-weight: bold;" class="mycode_b">Screenshot:</span> the actual lab row after the successful 2 GB change. The lab was subsequently returned to 1 GB.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. If the mailbox is already full</span></span><br />
Increasing the allowance can help only when the underlying server has space. Review large attachments, Sent, Junk and Trash. Export or back up messages you need before permanent cleanup. Deleting a mailbox is not a quota adjustment: it can remove the account and its mail.<br />
<br />
Do not reduce the allowance below current usage as a routine cleanup method. First reduce stored mail or choose a sufficient limit, then verify delivery with a new message.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Check quota notifications</span></span><br />
Under <span style="font-weight: bold;" class="mycode_b">Mail Server → Other Settings → Common settings</span>, our panel showed <span style="font-weight: bold;" class="mycode_b">Send email when quota exceeded</span> enabled. Check your own setting and test the notification separately; we did not deliberately fill this mailbox or verify an over-quota alert.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Related:</span> <a href="https://adminsforum.com/Thread-guide-create-a-user-mailbox-in-aapanel-mail-server" target="_blank" rel="noopener" class="mycode_url">Create a user mailbox</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Fix Reverse DNS and Test Email Delivery]]></title>
			<link>https://adminsforum.com/Thread-guide-fix-reverse-dns-and-test-email-delivery</link>
			<pubDate>Sun, 11 Oct 2026 20:17:15 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-fix-reverse-dns-and-test-email-delivery</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Reverse DNS identifies your sending server. Verify its PTR record, then send an actual message through your mailbox and review the receiving tool's authentication results.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Verified lab result, 11 October 2026:</span> AlphaVPS configured the PTR for 217.217.235.82 as mail.adminslab.com. Public forward and reverse lookups now match, and Postfix uses that same hostname. A real Roundcube message tested with <a href="https://seostacktools.com/email-tester" target="_blank" rel="noopener" class="mycode_url">SEOStackTools Email Tester</a> scored <span style="font-weight: bold;" class="mycode_b">95/100, Grade A: 12 passed, 2 to improve, 0 errors</span>. SPF, DKIM, DMARC, blacklist and PTR checks passed.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Understand forward and reverse DNS</span></span><br />
Forward DNS maps mail.example.com to your VPS IP. Reverse DNS maps that IP back to a hostname through a PTR record. The VPS provider controls reverse DNS for its address space. Adding a PTR record in your ordinary Cloudflare domain zone does not update the provider's reverse zone.<br />
<br />
Use a stable mail hostname that resolves to the sending IP. Our lab uses mail.adminslab.com for forward DNS, reverse DNS and the SMTP server hostname.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Request or set the PTR</span></span><br />
Check the VPS provider's Reverse DNS/rDNS/PTR settings. If no control is available, open a technical-support request with the VPS IP and desired full hostname. For example: Please set the PTR for our VPS IP to mail.example.com. Its forward A record already points to that IP.<br />
<br />
No root password is needed for a PTR request. After the provider confirms, check public DNS rather than relying only on the ticket's status.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Verify both directions</span></span><br />
On Ubuntu, these commands query a public resolver:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>host YOUR_VPS_IPV4 1.1.1.1
host mail.example.com 1.1.1.1
postconf myhostname</code></div></div>The first should return the desired hostname; the second should return the sending IP. The last shows Postfix's hostname. In our lab, all three agreed. If an old result remains, allow cached DNS to expire and check again. An NXDOMAIN response means that resolver found no PTR record.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Test with SEOStackTools</span></span><br />
1. Open <a href="https://seostacktools.com/email-tester" target="_blank" rel="noopener" class="mycode_url">SEOStackTools Email Tester</a>.<br />
2. Click <span style="font-weight: bold;" class="mycode_b">Get My Test Address</span>.<br />
3. Copy the unique recipient shown. Each test has its own address; do not copy one from a tutorial image.<br />
4. In your webmail, click Compose and send a normal message from the mailbox you want to test to that address.<br />
5. Return to the tool and click <span style="font-weight: bold;" class="mycode_b">Check My Score</span>.<br />
6. Wait for the report, then review Authentication, Content &amp; Spam Signals, Technical and Email Headers.<br />
<br />
Send from the server being tested to the external tester. A same-server local message cannot verify the complete external delivery path.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Interpret the measured result</span></span><br />
Our report showed SPF Pass, valid DKIM and DMARC alignment Pass. Under Technical, the blacklist check was Clean and Reverse DNS was Found, identifying mail.adminslab.com for the sending IP.<br />
<br />
The two suggestions concerned HTML/plain-text structure and a List-Unsubscribe header. This test was an ordinary plain-text mailbox message. Plain-text email is valid; multipart/alternative is useful when sending an HTML version. Unsubscribe headers apply to subscription/marketing mail and relevant bulk-sender requirements, rather than every personal reply. Review suggestions in the context of the message's purpose instead of changing the server simply to increase a score.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">6. Diagnose missing messages</span></span><br />
Check Postfix logs for the exact recipient and remote response. A queued message is still pending. SMTP 250 acceptance means the receiving server accepted it; it does not guarantee Inbox placement at every provider. PTR, authentication, reputation and content all contribute to delivery.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Current status:</span> PTR verified and external receipt/authentication tested with SEOStackTools. External inbound delivery from another mailbox provider remains a separate test. The old pre-PTR Mail-Tester result was 8.9/10; it is historical and uses a different scoring system from SEOStackTools.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Screenshot: measured SEOStackTools report</span><br />
<img src="https://adminsforum.com/uploads/tutorials/mail-seostack-branded-20261011.png" loading="lazy"  alt="[Image: mail-seostack-branded-20261011.png]" class="mycode_img" /><br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Mail tutorial series</span></span><br />
<a href="https://adminsforum.com/Thread-guide-add-a-mail-domain-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Add a Mail Domain in aaPanel Free Edition</a><br />
<a href="https://adminsforum.com/Thread-guide-install-ssl-for-aapanel-mail-server" target="_blank" rel="noopener" class="mycode_url">Install SSL for aaPanel Mail Server</a><br />
<a href="https://adminsforum.com/Thread-guide-configure-mail-dns-records-in-cloudflare-for-aapanel" target="_blank" rel="noopener" class="mycode_url">Configure Mail DNS Records in Cloudflare for aaPanel</a><br />
<a href="https://adminsforum.com/Thread-guide-create-a-user-mailbox-in-aapanel-mail-server" target="_blank" rel="noopener" class="mycode_url">Create a User Mailbox in aaPanel Mail Server</a><br />
<a href="https://adminsforum.com/Thread-guide-install-and-access-webmail-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Install and Access Webmail in aaPanel Free Edition</a><br />
<a href="https://adminsforum.com/Thread-guide-send-and-receive-email-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Send and Receive Email in aaPanel Free Edition</a><br />
<a href="https://adminsforum.com/Thread-guide-create-email-forwarding-and-catch-all-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Create Email Forwarding and Catch-All in aaPanel Free Edition</a>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Reverse DNS identifies your sending server. Verify its PTR record, then send an actual message through your mailbox and review the receiving tool's authentication results.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Verified lab result, 11 October 2026:</span> AlphaVPS configured the PTR for 217.217.235.82 as mail.adminslab.com. Public forward and reverse lookups now match, and Postfix uses that same hostname. A real Roundcube message tested with <a href="https://seostacktools.com/email-tester" target="_blank" rel="noopener" class="mycode_url">SEOStackTools Email Tester</a> scored <span style="font-weight: bold;" class="mycode_b">95/100, Grade A: 12 passed, 2 to improve, 0 errors</span>. SPF, DKIM, DMARC, blacklist and PTR checks passed.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Understand forward and reverse DNS</span></span><br />
Forward DNS maps mail.example.com to your VPS IP. Reverse DNS maps that IP back to a hostname through a PTR record. The VPS provider controls reverse DNS for its address space. Adding a PTR record in your ordinary Cloudflare domain zone does not update the provider's reverse zone.<br />
<br />
Use a stable mail hostname that resolves to the sending IP. Our lab uses mail.adminslab.com for forward DNS, reverse DNS and the SMTP server hostname.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Request or set the PTR</span></span><br />
Check the VPS provider's Reverse DNS/rDNS/PTR settings. If no control is available, open a technical-support request with the VPS IP and desired full hostname. For example: Please set the PTR for our VPS IP to mail.example.com. Its forward A record already points to that IP.<br />
<br />
No root password is needed for a PTR request. After the provider confirms, check public DNS rather than relying only on the ticket's status.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Verify both directions</span></span><br />
On Ubuntu, these commands query a public resolver:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>host YOUR_VPS_IPV4 1.1.1.1
host mail.example.com 1.1.1.1
postconf myhostname</code></div></div>The first should return the desired hostname; the second should return the sending IP. The last shows Postfix's hostname. In our lab, all three agreed. If an old result remains, allow cached DNS to expire and check again. An NXDOMAIN response means that resolver found no PTR record.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Test with SEOStackTools</span></span><br />
1. Open <a href="https://seostacktools.com/email-tester" target="_blank" rel="noopener" class="mycode_url">SEOStackTools Email Tester</a>.<br />
2. Click <span style="font-weight: bold;" class="mycode_b">Get My Test Address</span>.<br />
3. Copy the unique recipient shown. Each test has its own address; do not copy one from a tutorial image.<br />
4. In your webmail, click Compose and send a normal message from the mailbox you want to test to that address.<br />
5. Return to the tool and click <span style="font-weight: bold;" class="mycode_b">Check My Score</span>.<br />
6. Wait for the report, then review Authentication, Content &amp; Spam Signals, Technical and Email Headers.<br />
<br />
Send from the server being tested to the external tester. A same-server local message cannot verify the complete external delivery path.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Interpret the measured result</span></span><br />
Our report showed SPF Pass, valid DKIM and DMARC alignment Pass. Under Technical, the blacklist check was Clean and Reverse DNS was Found, identifying mail.adminslab.com for the sending IP.<br />
<br />
The two suggestions concerned HTML/plain-text structure and a List-Unsubscribe header. This test was an ordinary plain-text mailbox message. Plain-text email is valid; multipart/alternative is useful when sending an HTML version. Unsubscribe headers apply to subscription/marketing mail and relevant bulk-sender requirements, rather than every personal reply. Review suggestions in the context of the message's purpose instead of changing the server simply to increase a score.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">6. Diagnose missing messages</span></span><br />
Check Postfix logs for the exact recipient and remote response. A queued message is still pending. SMTP 250 acceptance means the receiving server accepted it; it does not guarantee Inbox placement at every provider. PTR, authentication, reputation and content all contribute to delivery.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Current status:</span> PTR verified and external receipt/authentication tested with SEOStackTools. External inbound delivery from another mailbox provider remains a separate test. The old pre-PTR Mail-Tester result was 8.9/10; it is historical and uses a different scoring system from SEOStackTools.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Screenshot: measured SEOStackTools report</span><br />
<img src="https://adminsforum.com/uploads/tutorials/mail-seostack-branded-20261011.png" loading="lazy"  alt="[Image: mail-seostack-branded-20261011.png]" class="mycode_img" /><br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Mail tutorial series</span></span><br />
<a href="https://adminsforum.com/Thread-guide-add-a-mail-domain-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Add a Mail Domain in aaPanel Free Edition</a><br />
<a href="https://adminsforum.com/Thread-guide-install-ssl-for-aapanel-mail-server" target="_blank" rel="noopener" class="mycode_url">Install SSL for aaPanel Mail Server</a><br />
<a href="https://adminsforum.com/Thread-guide-configure-mail-dns-records-in-cloudflare-for-aapanel" target="_blank" rel="noopener" class="mycode_url">Configure Mail DNS Records in Cloudflare for aaPanel</a><br />
<a href="https://adminsforum.com/Thread-guide-create-a-user-mailbox-in-aapanel-mail-server" target="_blank" rel="noopener" class="mycode_url">Create a User Mailbox in aaPanel Mail Server</a><br />
<a href="https://adminsforum.com/Thread-guide-install-and-access-webmail-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Install and Access Webmail in aaPanel Free Edition</a><br />
<a href="https://adminsforum.com/Thread-guide-send-and-receive-email-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Send and Receive Email in aaPanel Free Edition</a><br />
<a href="https://adminsforum.com/Thread-guide-create-email-forwarding-and-catch-all-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Create Email Forwarding and Catch-All in aaPanel Free Edition</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Create Email Forwarding and Catch-All in aaPanel Free Edition]]></title>
			<link>https://adminsforum.com/Thread-guide-create-email-forwarding-and-catch-all-in-aapanel-free-edition</link>
			<pubDate>Sun, 11 Oct 2026 20:16:02 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-create-email-forwarding-and-catch-all-in-aapanel-free-edition</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">An email forward sends mail for one address to another destination. Catch-all sends mail addressed to otherwise nonexistent users in a domain to a chosen mailbox.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested lab:</span> support@adminslab.com forwarded to admin@adminslab.com with catch-all disabled. A separate message to tutorial-catchall-test@adminslab.com reached the same mailbox after catch-all was enabled. These were local delivery tests; forwarding to external providers needs an additional test.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Create the receiving mailbox first</span></span><br />
Create and enable the destination, for example admin@example.com, and verify that it receives ordinary messages. A forwarding alias does not create a separate mailbox, password or storage allowance. Do not point an alias back to itself or build a circular forwarding chain.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Add a forwarding address</span></span><br />
1. Open <span style="font-weight: bold;" class="mycode_b">Mail Server → Other Settings</span>.<br />
2. Select <span style="font-weight: bold;" class="mycode_b">Mail forward</span>.<br />
3. Click <span style="font-weight: bold;" class="mycode_b">Add Forward</span>.<br />
4. Keep <span style="font-weight: bold;" class="mycode_b">Status</span> enabled.<br />
5. In <span style="font-weight: bold;" class="mycode_b">Forwarded users</span>, enter the full source address: support@example.com.<br />
6. In <span style="font-weight: bold;" class="mycode_b">Domain</span>, enter example.com.<br />
7. In <span style="font-weight: bold;" class="mycode_b">Receiving user</span>, enter admin@example.com. For multiple destinations, the dialog instructs you to put each on a new line.<br />
8. Click <span style="font-weight: bold;" class="mycode_b">Confirm</span> and wait for Mail forwarding added successfully.<br />
<br />
Inspect the saved Address and Goto columns. The source must be the complete address. In our version, entering only support saved an incomplete Address value, so we disabled that test entry and created support@adminslab.com instead. A success notice alone does not validate the intended address.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Test forwarding independently</span></span><br />
If catch-all is enabled, temporarily turn it off before the alias test. Otherwise it can conceal an incorrect alias by delivering any unknown address anyway. Send a message with a unique subject to the full alias, then refresh the receiving mailbox's Inbox.<br />
<br />
Our isolated test reached admin@adminslab.com. Postfix logs recorded support@adminslab.com as the original recipient and the admin mailbox as the delivered recipient.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Enable catch-all for the domain</span></span><br />
Open <span style="font-weight: bold;" class="mycode_b">Mail Server → Mail Domain</span>. Click the domain row's <span style="font-weight: bold;" class="mycode_b">Catch All</span> switch. In the Catch email dialog, enter an existing destination in <span style="font-weight: bold;" class="mycode_b">Forward email</span> and click Confirm. You can also set the <span style="font-weight: bold;" class="mycode_b">Catch All</span> destination through the domain's Edit dialog.<br />
<br />
Check that the switch becomes enabled. In Mail forward, the resulting domain-wide entry appeared as @adminslab.com pointing to admin@adminslab.com in our lab. This is different from a specific support@ alias.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Test an unused address</span></span><br />
Choose an address that is not a mailbox or alias, such as tutorial-catchall-test@example.com. Send a unique test message and verify it appears at the catch-all destination. Our test did. Existing mailboxes continue to have their own delivery rules; catch-all is intended for otherwise unknown addresses.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Manage and troubleshoot</span></span><br />
Catch-all accepts typo addresses and can also collect unwanted mail, so use it when that behavior is useful and watch quota usage. Disable it with the domain switch when no longer needed. For a failed forward, check Status, the full source address, destination existence, loops and server logs. External forwarding may introduce SPF/DMARC complications; test that destination separately before relying on it.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Screenshot: catch-all destination</span><br />
<img src="https://adminsforum.com/uploads/tutorials/mail-catchall-branded-20261011.png" loading="lazy"  alt="[Image: mail-catchall-branded-20261011.png]" class="mycode_img" /><br />
<br />
<a href="https://adminsforum.com/Thread-guide-create-a-user-mailbox-in-aapanel-mail-server" target="_blank" rel="noopener" class="mycode_url">Prerequisite: Create a user mailbox</a>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">An email forward sends mail for one address to another destination. Catch-all sends mail addressed to otherwise nonexistent users in a domain to a chosen mailbox.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested lab:</span> support@adminslab.com forwarded to admin@adminslab.com with catch-all disabled. A separate message to tutorial-catchall-test@adminslab.com reached the same mailbox after catch-all was enabled. These were local delivery tests; forwarding to external providers needs an additional test.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Create the receiving mailbox first</span></span><br />
Create and enable the destination, for example admin@example.com, and verify that it receives ordinary messages. A forwarding alias does not create a separate mailbox, password or storage allowance. Do not point an alias back to itself or build a circular forwarding chain.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Add a forwarding address</span></span><br />
1. Open <span style="font-weight: bold;" class="mycode_b">Mail Server → Other Settings</span>.<br />
2. Select <span style="font-weight: bold;" class="mycode_b">Mail forward</span>.<br />
3. Click <span style="font-weight: bold;" class="mycode_b">Add Forward</span>.<br />
4. Keep <span style="font-weight: bold;" class="mycode_b">Status</span> enabled.<br />
5. In <span style="font-weight: bold;" class="mycode_b">Forwarded users</span>, enter the full source address: support@example.com.<br />
6. In <span style="font-weight: bold;" class="mycode_b">Domain</span>, enter example.com.<br />
7. In <span style="font-weight: bold;" class="mycode_b">Receiving user</span>, enter admin@example.com. For multiple destinations, the dialog instructs you to put each on a new line.<br />
8. Click <span style="font-weight: bold;" class="mycode_b">Confirm</span> and wait for Mail forwarding added successfully.<br />
<br />
Inspect the saved Address and Goto columns. The source must be the complete address. In our version, entering only support saved an incomplete Address value, so we disabled that test entry and created support@adminslab.com instead. A success notice alone does not validate the intended address.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Test forwarding independently</span></span><br />
If catch-all is enabled, temporarily turn it off before the alias test. Otherwise it can conceal an incorrect alias by delivering any unknown address anyway. Send a message with a unique subject to the full alias, then refresh the receiving mailbox's Inbox.<br />
<br />
Our isolated test reached admin@adminslab.com. Postfix logs recorded support@adminslab.com as the original recipient and the admin mailbox as the delivered recipient.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Enable catch-all for the domain</span></span><br />
Open <span style="font-weight: bold;" class="mycode_b">Mail Server → Mail Domain</span>. Click the domain row's <span style="font-weight: bold;" class="mycode_b">Catch All</span> switch. In the Catch email dialog, enter an existing destination in <span style="font-weight: bold;" class="mycode_b">Forward email</span> and click Confirm. You can also set the <span style="font-weight: bold;" class="mycode_b">Catch All</span> destination through the domain's Edit dialog.<br />
<br />
Check that the switch becomes enabled. In Mail forward, the resulting domain-wide entry appeared as @adminslab.com pointing to admin@adminslab.com in our lab. This is different from a specific support@ alias.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Test an unused address</span></span><br />
Choose an address that is not a mailbox or alias, such as tutorial-catchall-test@example.com. Send a unique test message and verify it appears at the catch-all destination. Our test did. Existing mailboxes continue to have their own delivery rules; catch-all is intended for otherwise unknown addresses.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Manage and troubleshoot</span></span><br />
Catch-all accepts typo addresses and can also collect unwanted mail, so use it when that behavior is useful and watch quota usage. Disable it with the domain switch when no longer needed. For a failed forward, check Status, the full source address, destination existence, loops and server logs. External forwarding may introduce SPF/DMARC complications; test that destination separately before relying on it.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Screenshot: catch-all destination</span><br />
<img src="https://adminsforum.com/uploads/tutorials/mail-catchall-branded-20261011.png" loading="lazy"  alt="[Image: mail-catchall-branded-20261011.png]" class="mycode_img" /><br />
<br />
<a href="https://adminsforum.com/Thread-guide-create-a-user-mailbox-in-aapanel-mail-server" target="_blank" rel="noopener" class="mycode_url">Prerequisite: Create a user mailbox</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Send and Receive Email in aaPanel Free Edition]]></title>
			<link>https://adminsforum.com/Thread-guide-send-and-receive-email-in-aapanel-free-edition</link>
			<pubDate>Sun, 11 Oct 2026 20:14:48 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-send-and-receive-email-in-aapanel-free-edition</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Test sending and receiving separately. A message in Sent means the client submitted it; it does not prove delivery to an external user's Inbox.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lab evidence:</span> Roundcube submitted a message from admin@adminslab.com to the same lab mailbox, and it appeared in Inbox. A separate outbound message was accepted by SEOStackTools Email Tester and scored 95/100 (Grade A), with SPF, DKIM, DMARC and PTR passing. External inbound delivery from another provider has not yet been verified in this lab.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Check the setup before sending</span></span><br />
You need an enabled mailbox, correct MX/A records, running Postfix and Dovecot, trusted mail TLS and working webmail or a configured email client. For external delivery, the provider must allow outbound SMTP traffic. PTR and sender reputation also affect acceptance.<br />
<br />
Sign into your HTTPS webmail address with the full mailbox address and mailbox password. Our lab uses webmail.adminslab.com.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Compose a simple test</span></span><br />
1. Click <span style="font-weight: bold;" class="mycode_b">Compose</span> in Roundcube's left menu.<br />
2. Check <span style="font-weight: bold;" class="mycode_b">From</span> is your mailbox.<br />
3. Enter a recipient address you control in <span style="font-weight: bold;" class="mycode_b">To</span> and press Enter so it becomes a recipient entry.<br />
4. Enter a unique Subject, for example Mail test 01.<br />
5. Enter a short normal message in <span style="font-weight: bold;" class="mycode_b">Message Body</span>.<br />
6. Leave <span style="font-weight: bold;" class="mycode_b">Save sent message in</span> set to Sent.<br />
7. Click <span style="font-weight: bold;" class="mycode_b">Send</span> once and wait for the result.<br />
<br />
For an initial local test, send to your own lab mailbox. This checks submission and local storage without depending on another provider. Then repeat with an external address you control.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Check Sent and the destination</span></span><br />
Open Sent and locate the unique subject. At the receiving account, check Inbox and Spam/Junk. If it arrives, reply from that external account to your aaPanel mailbox. This return message tests external inbound delivery.<br />
<br />
In Roundcube, open <span style="font-weight: bold;" class="mycode_b">Inbox</span> and click <span style="font-weight: bold;" class="mycode_b">Refresh</span>. Open the received message and use Reply for a normal conversation test. Record which direction succeeds; avoid calling the whole setup verified when only one direction was tested.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Use a desktop client if required</span></span><br />
Get your mailbox's connection details from <span style="font-weight: bold;" class="mycode_b">Mail Server → Mailboxes → Login info → Copy</span>. For our verified TLS endpoints, the hostname is mail.adminslab.com, IMAP uses 993 with SSL/TLS, and authenticated SMTP uses 587 with STARTTLS. Use the full mailbox address as username. Confirm these values against your own server configuration rather than copying the lab hostname.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Diagnose a missing message</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Send fails immediately:</span> read the exact client error; check authentication, SMTP service and connection settings.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Sent exists but remote delivery fails:</span> inspect Postfix queue/logs for the recipient, status and remote rejection reason. A queued message remains pending.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Incoming mail never arrives:</span> verify public MX, the MX target's A record, inbound port 25, provider firewall and recipient spelling.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Mail reaches Junk:</span> inspect SPF/DKIM/DMARC alignment, PTR, content and reputation. Do not keep resending identical messages rapidly.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Next check:</span> use <a href="https://seostacktools.com/email-tester" target="_blank" rel="noopener" class="mycode_url">SEOStackTools Email Tester</a> to examine authentication and delivery deductions. Local receipt and an external 250 acceptance are useful evidence, but neither guarantees inbox placement at every provider.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Screenshot: working mailbox</span><br />
<img src="https://adminsforum.com/uploads/tutorials/mail-webmail-branded-20261011.png" loading="lazy"  alt="[Image: mail-webmail-branded-20261011.png]" class="mycode_img" /><br />
<br />
<a href="https://adminsforum.com/Thread-guide-install-and-access-webmail-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Previous: Install and access webmail</a>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Test sending and receiving separately. A message in Sent means the client submitted it; it does not prove delivery to an external user's Inbox.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lab evidence:</span> Roundcube submitted a message from admin@adminslab.com to the same lab mailbox, and it appeared in Inbox. A separate outbound message was accepted by SEOStackTools Email Tester and scored 95/100 (Grade A), with SPF, DKIM, DMARC and PTR passing. External inbound delivery from another provider has not yet been verified in this lab.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Check the setup before sending</span></span><br />
You need an enabled mailbox, correct MX/A records, running Postfix and Dovecot, trusted mail TLS and working webmail or a configured email client. For external delivery, the provider must allow outbound SMTP traffic. PTR and sender reputation also affect acceptance.<br />
<br />
Sign into your HTTPS webmail address with the full mailbox address and mailbox password. Our lab uses webmail.adminslab.com.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Compose a simple test</span></span><br />
1. Click <span style="font-weight: bold;" class="mycode_b">Compose</span> in Roundcube's left menu.<br />
2. Check <span style="font-weight: bold;" class="mycode_b">From</span> is your mailbox.<br />
3. Enter a recipient address you control in <span style="font-weight: bold;" class="mycode_b">To</span> and press Enter so it becomes a recipient entry.<br />
4. Enter a unique Subject, for example Mail test 01.<br />
5. Enter a short normal message in <span style="font-weight: bold;" class="mycode_b">Message Body</span>.<br />
6. Leave <span style="font-weight: bold;" class="mycode_b">Save sent message in</span> set to Sent.<br />
7. Click <span style="font-weight: bold;" class="mycode_b">Send</span> once and wait for the result.<br />
<br />
For an initial local test, send to your own lab mailbox. This checks submission and local storage without depending on another provider. Then repeat with an external address you control.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Check Sent and the destination</span></span><br />
Open Sent and locate the unique subject. At the receiving account, check Inbox and Spam/Junk. If it arrives, reply from that external account to your aaPanel mailbox. This return message tests external inbound delivery.<br />
<br />
In Roundcube, open <span style="font-weight: bold;" class="mycode_b">Inbox</span> and click <span style="font-weight: bold;" class="mycode_b">Refresh</span>. Open the received message and use Reply for a normal conversation test. Record which direction succeeds; avoid calling the whole setup verified when only one direction was tested.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Use a desktop client if required</span></span><br />
Get your mailbox's connection details from <span style="font-weight: bold;" class="mycode_b">Mail Server → Mailboxes → Login info → Copy</span>. For our verified TLS endpoints, the hostname is mail.adminslab.com, IMAP uses 993 with SSL/TLS, and authenticated SMTP uses 587 with STARTTLS. Use the full mailbox address as username. Confirm these values against your own server configuration rather than copying the lab hostname.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Diagnose a missing message</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Send fails immediately:</span> read the exact client error; check authentication, SMTP service and connection settings.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Sent exists but remote delivery fails:</span> inspect Postfix queue/logs for the recipient, status and remote rejection reason. A queued message remains pending.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Incoming mail never arrives:</span> verify public MX, the MX target's A record, inbound port 25, provider firewall and recipient spelling.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Mail reaches Junk:</span> inspect SPF/DKIM/DMARC alignment, PTR, content and reputation. Do not keep resending identical messages rapidly.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Next check:</span> use <a href="https://seostacktools.com/email-tester" target="_blank" rel="noopener" class="mycode_url">SEOStackTools Email Tester</a> to examine authentication and delivery deductions. Local receipt and an external 250 acceptance are useful evidence, but neither guarantees inbox placement at every provider.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Screenshot: working mailbox</span><br />
<img src="https://adminsforum.com/uploads/tutorials/mail-webmail-branded-20261011.png" loading="lazy"  alt="[Image: mail-webmail-branded-20261011.png]" class="mycode_img" /><br />
<br />
<a href="https://adminsforum.com/Thread-guide-install-and-access-webmail-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Previous: Install and access webmail</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Install and Access Webmail in aaPanel Free Edition]]></title>
			<link>https://adminsforum.com/Thread-guide-install-and-access-webmail-in-aapanel-free-edition</link>
			<pubDate>Sun, 11 Oct 2026 20:13:38 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-install-and-access-webmail-in-aapanel-free-edition</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Webmail lets a mailbox user read and send email in a browser. It is separate from the aaPanel administration dashboard and needs its own website address and HTTPS certificate.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested lab:</span> aaPanel Free Edition 8.0.6, Mail Server 7.4.1, Roundcube installed on webmail.adminslab.com using PHP 8.4. The mailbox login worked over HTTPS, and a test message appeared in Inbox.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Prepare DNS and a mailbox</span></span><br />
Create an A record named webmail pointing to your VPS IPv4 address. Our Cloudflare lab kept this record DNS only for installation and certificate validation. This web address is different from mail.example.com, the SMTP/IMAP hostname. Create an enabled mailbox before testing login.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Install through the mail-domain row</span></span><br />
1. Open <span style="font-weight: bold;" class="mycode_b">Mail Server → Mail Domain</span>.<br />
2. Find your domain and click <span style="font-weight: bold;" class="mycode_b">Not Installed</span> in the WebMail column.<br />
3. In Install WebMail, enter webmail as the domain prefix. Check the complete address displayed beside the field.<br />
4. Select an installed PHP version compatible with the bundled webmail. We used PHP-84; do not assume the newest PHP version is supported by every bundled application.<br />
5. Click <span style="font-weight: bold;" class="mycode_b">Confirm</span> and wait for WebMail Installation Successful.<br />
<br />
The domain row should change to <span style="font-weight: bold;" class="mycode_b">Installed</span>. The success notice directs you to <span style="font-weight: bold;" class="mycode_b">Website → PHP Project</span>, where the new webmail site can be managed. In this tested version, the older Other Settings WebMail controls were disabled and pointed back to Mail Domain. Use the domain-row installer instead.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Enable HTTPS on the webmail website</span></span><br />
Open Website, find webmail.example.com and select its <span style="font-weight: bold;" class="mycode_b">Not Set</span> SSL button. Select <span style="font-weight: bold;" class="mycode_b">Let's Encrypt → File Verification</span>, check the webmail hostname and click <span style="font-weight: bold;" class="mycode_b">Apply</span>. Its DNS must point to the server, and port 80 must be reachable for this validation method.<br />
<br />
Wait for <span style="font-weight: bold;" class="mycode_b">Deployed</span> and verify that the certificate's domain list includes webmail.example.com. Our certificate showed 89 days remaining. Mail-service TLS for mail.example.com does not automatically give this separate webmail website a matching certificate.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Sign into Roundcube</span></span><br />
Open <a href="https://webmail.example.com" target="_blank" rel="noopener" class="mycode_url">https://webmail.example.com</a>. Enter the <span style="font-weight: bold;" class="mycode_b">full mailbox address</span>, such as admin@example.com, and that mailbox's password. Click Login. Do not use the VPS root password, panel username or aaPanel.com account.<br />
<br />
A successful login displays Inbox, Drafts, Sent, Junk, Trash and Compose. Check the browser's hostname and certificate before entering credentials.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Troubleshooting</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Default website appears:</span> check the webmail DNS record, site domain binding and HTTPS certificate.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Login rejected:</span> check the full email address, mailbox password and enabled Status.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">PHP warning or parsererror:</span> our bundled Roundcube emitted an E_STRICT deprecation on PHP 8.4. We turned off public error display for this site's PHP configuration, kept error logging enabled and reloaded its PHP service. This restored inbox requests. Review logged compatibility issues and use a supported release; hiding public warnings is not a substitute for fixing application errors.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Result:</span> webmail installed, HTTPS certificate deployed, mailbox login and local message receipt verified.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Screenshot: working Roundcube mailbox</span><br />
<img src="https://adminsforum.com/uploads/tutorials/mail-webmail-branded-20261011.png" loading="lazy"  alt="[Image: mail-webmail-branded-20261011.png]" class="mycode_img" /><br />
<span style="font-weight: bold;" class="mycode_b">Prerequisite:</span> <a href="https://adminsforum.com/Thread-guide-create-a-user-mailbox-in-aapanel-mail-server" target="_blank" rel="noopener" class="mycode_url">Create a user mailbox</a>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Webmail lets a mailbox user read and send email in a browser. It is separate from the aaPanel administration dashboard and needs its own website address and HTTPS certificate.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested lab:</span> aaPanel Free Edition 8.0.6, Mail Server 7.4.1, Roundcube installed on webmail.adminslab.com using PHP 8.4. The mailbox login worked over HTTPS, and a test message appeared in Inbox.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Prepare DNS and a mailbox</span></span><br />
Create an A record named webmail pointing to your VPS IPv4 address. Our Cloudflare lab kept this record DNS only for installation and certificate validation. This web address is different from mail.example.com, the SMTP/IMAP hostname. Create an enabled mailbox before testing login.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Install through the mail-domain row</span></span><br />
1. Open <span style="font-weight: bold;" class="mycode_b">Mail Server → Mail Domain</span>.<br />
2. Find your domain and click <span style="font-weight: bold;" class="mycode_b">Not Installed</span> in the WebMail column.<br />
3. In Install WebMail, enter webmail as the domain prefix. Check the complete address displayed beside the field.<br />
4. Select an installed PHP version compatible with the bundled webmail. We used PHP-84; do not assume the newest PHP version is supported by every bundled application.<br />
5. Click <span style="font-weight: bold;" class="mycode_b">Confirm</span> and wait for WebMail Installation Successful.<br />
<br />
The domain row should change to <span style="font-weight: bold;" class="mycode_b">Installed</span>. The success notice directs you to <span style="font-weight: bold;" class="mycode_b">Website → PHP Project</span>, where the new webmail site can be managed. In this tested version, the older Other Settings WebMail controls were disabled and pointed back to Mail Domain. Use the domain-row installer instead.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Enable HTTPS on the webmail website</span></span><br />
Open Website, find webmail.example.com and select its <span style="font-weight: bold;" class="mycode_b">Not Set</span> SSL button. Select <span style="font-weight: bold;" class="mycode_b">Let's Encrypt → File Verification</span>, check the webmail hostname and click <span style="font-weight: bold;" class="mycode_b">Apply</span>. Its DNS must point to the server, and port 80 must be reachable for this validation method.<br />
<br />
Wait for <span style="font-weight: bold;" class="mycode_b">Deployed</span> and verify that the certificate's domain list includes webmail.example.com. Our certificate showed 89 days remaining. Mail-service TLS for mail.example.com does not automatically give this separate webmail website a matching certificate.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Sign into Roundcube</span></span><br />
Open <a href="https://webmail.example.com" target="_blank" rel="noopener" class="mycode_url">https://webmail.example.com</a>. Enter the <span style="font-weight: bold;" class="mycode_b">full mailbox address</span>, such as admin@example.com, and that mailbox's password. Click Login. Do not use the VPS root password, panel username or aaPanel.com account.<br />
<br />
A successful login displays Inbox, Drafts, Sent, Junk, Trash and Compose. Check the browser's hostname and certificate before entering credentials.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Troubleshooting</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Default website appears:</span> check the webmail DNS record, site domain binding and HTTPS certificate.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Login rejected:</span> check the full email address, mailbox password and enabled Status.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">PHP warning or parsererror:</span> our bundled Roundcube emitted an E_STRICT deprecation on PHP 8.4. We turned off public error display for this site's PHP configuration, kept error logging enabled and reloaded its PHP service. This restored inbox requests. Review logged compatibility issues and use a supported release; hiding public warnings is not a substitute for fixing application errors.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Result:</span> webmail installed, HTTPS certificate deployed, mailbox login and local message receipt verified.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Screenshot: working Roundcube mailbox</span><br />
<img src="https://adminsforum.com/uploads/tutorials/mail-webmail-branded-20261011.png" loading="lazy"  alt="[Image: mail-webmail-branded-20261011.png]" class="mycode_img" /><br />
<span style="font-weight: bold;" class="mycode_b">Prerequisite:</span> <a href="https://adminsforum.com/Thread-guide-create-a-user-mailbox-in-aapanel-mail-server" target="_blank" rel="noopener" class="mycode_url">Create a user mailbox</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Create a User Mailbox in aaPanel Mail Server]]></title>
			<link>https://adminsforum.com/Thread-guide-create-a-user-mailbox-in-aapanel-mail-server</link>
			<pubDate>Sun, 11 Oct 2026 20:09:25 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-create-a-user-mailbox-in-aapanel-mail-server</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">A mail domain does not automatically create email users. Create a mailbox with its own password and storage quota before trying to sign into webmail or a mail client.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested lab:</span> admin@adminslab.com was created, enabled and assigned a 1 GB quota with the General user type. No password is included in this guide.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Complete the domain prerequisites</span></span><br />
Install and initialize Mail Server, add your mail domain and publish its mail-host A record and MX record. Configure trusted TLS for the mail hostname before sending credentials from an external client. The mailbox username, panel login and aaPanel.com account are three different accounts.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Open Add Mailbox</span></span><br />
1. Select <span style="font-weight: bold;" class="mycode_b">Mail Server</span>.<br />
2. Open <span style="font-weight: bold;" class="mycode_b">Mailboxes</span>.<br />
3. Click <span style="font-weight: bold;" class="mycode_b">Add Mailbox</span>.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Enter the user's details</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Name:</span> a readable name, such as Lab Admin.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Quota limit:</span> keep enabled when you want a storage cap.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Quota:</span> our lab chose 1 GB. Pick a limit appropriate to the available disk and total domain quota. A mailbox cap is not a backup policy.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">User type:</span> our mailbox used General user. Do not grant administrative capabilities unless the person needs them.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Email Address:</span> enter the local part admin and select example.com from the domain selector. The resulting address is admin@example.com. Do not put the entire address into the local-part field.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Email Password:</span> create a unique password for this mailbox and save it securely. Avoid reusing the VPS or panel password.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Status:</span> keep enabled for a mailbox that should be able to log in.<br />
</li>
</ul>
Click <span style="font-weight: bold;" class="mycode_b">Confirm</span>. Wait for the success message before submitting again.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Verify the new row</span></span><br />
The Mailboxes list should show the full address, masked password, quota, type and enabled status. Our row showed 0.00 B/1.00 GB and General user. Masked stars are expected; a screenshot does not need the real password.<br />
<br />
The <span style="font-weight: bold;" class="mycode_b">Copy</span> control under Login info provides connection information. Check the actual server name and ports. Use the full address as the login username, the mailbox password, and the mail hostname covered by your certificate. Webmail installation is a separate task.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Test access and delivery separately</span></span><br />
Successful login proves credentials work; it does not prove external email delivery. Send a message to an external address you control and reply back. Check Inbox, Spam and server logs. Keep an error's exact text if either direction fails.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Troubleshooting</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Domain missing:</span> add it in Mail Domain before creating users.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Invalid login:</span> use the full email address, check Status, and use the mailbox password rather than the panel password.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Quota exceeded:</span> review mailbox and domain usage before raising limits.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Forgotten password:</span> use the mailbox Edit control to reset it and update the user's clients.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Screenshot: created and enabled mailbox</span><br />
<img src="https://adminsforum.com/uploads/tutorials/mail-mailbox-branded-20261011.png" loading="lazy"  alt="[Image: mail-mailbox-branded-20261011.png]" class="mycode_img" /><br />
<span style="font-weight: bold;" class="mycode_b">Before this step:</span> <a href="https://adminsforum.com/Thread-guide-add-a-mail-domain-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Add a mail domain</a> · <a href="https://adminsforum.com/Thread-guide-configure-mail-dns-records-in-cloudflare-for-aapanel" target="_blank" rel="noopener" class="mycode_url">Configure Cloudflare DNS</a>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">A mail domain does not automatically create email users. Create a mailbox with its own password and storage quota before trying to sign into webmail or a mail client.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested lab:</span> admin@adminslab.com was created, enabled and assigned a 1 GB quota with the General user type. No password is included in this guide.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Complete the domain prerequisites</span></span><br />
Install and initialize Mail Server, add your mail domain and publish its mail-host A record and MX record. Configure trusted TLS for the mail hostname before sending credentials from an external client. The mailbox username, panel login and aaPanel.com account are three different accounts.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Open Add Mailbox</span></span><br />
1. Select <span style="font-weight: bold;" class="mycode_b">Mail Server</span>.<br />
2. Open <span style="font-weight: bold;" class="mycode_b">Mailboxes</span>.<br />
3. Click <span style="font-weight: bold;" class="mycode_b">Add Mailbox</span>.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Enter the user's details</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Name:</span> a readable name, such as Lab Admin.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Quota limit:</span> keep enabled when you want a storage cap.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Quota:</span> our lab chose 1 GB. Pick a limit appropriate to the available disk and total domain quota. A mailbox cap is not a backup policy.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">User type:</span> our mailbox used General user. Do not grant administrative capabilities unless the person needs them.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Email Address:</span> enter the local part admin and select example.com from the domain selector. The resulting address is admin@example.com. Do not put the entire address into the local-part field.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Email Password:</span> create a unique password for this mailbox and save it securely. Avoid reusing the VPS or panel password.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Status:</span> keep enabled for a mailbox that should be able to log in.<br />
</li>
</ul>
Click <span style="font-weight: bold;" class="mycode_b">Confirm</span>. Wait for the success message before submitting again.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Verify the new row</span></span><br />
The Mailboxes list should show the full address, masked password, quota, type and enabled status. Our row showed 0.00 B/1.00 GB and General user. Masked stars are expected; a screenshot does not need the real password.<br />
<br />
The <span style="font-weight: bold;" class="mycode_b">Copy</span> control under Login info provides connection information. Check the actual server name and ports. Use the full address as the login username, the mailbox password, and the mail hostname covered by your certificate. Webmail installation is a separate task.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Test access and delivery separately</span></span><br />
Successful login proves credentials work; it does not prove external email delivery. Send a message to an external address you control and reply back. Check Inbox, Spam and server logs. Keep an error's exact text if either direction fails.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Troubleshooting</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Domain missing:</span> add it in Mail Domain before creating users.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Invalid login:</span> use the full email address, check Status, and use the mailbox password rather than the panel password.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Quota exceeded:</span> review mailbox and domain usage before raising limits.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Forgotten password:</span> use the mailbox Edit control to reset it and update the user's clients.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Screenshot: created and enabled mailbox</span><br />
<img src="https://adminsforum.com/uploads/tutorials/mail-mailbox-branded-20261011.png" loading="lazy"  alt="[Image: mail-mailbox-branded-20261011.png]" class="mycode_img" /><br />
<span style="font-weight: bold;" class="mycode_b">Before this step:</span> <a href="https://adminsforum.com/Thread-guide-add-a-mail-domain-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Add a mail domain</a> · <a href="https://adminsforum.com/Thread-guide-configure-mail-dns-records-in-cloudflare-for-aapanel" target="_blank" rel="noopener" class="mycode_url">Configure Cloudflare DNS</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Configure Mail DNS Records in Cloudflare for aaPanel]]></title>
			<link>https://adminsforum.com/Thread-guide-configure-mail-dns-records-in-cloudflare-for-aapanel</link>
			<pubDate>Sun, 11 Oct 2026 20:07:56 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-configure-mail-dns-records-in-cloudflare-for-aapanel</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">aaPanel generates your mail-domain record values; Cloudflare publishes them when Cloudflare hosts your domain's authoritative DNS.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested:</span> The lab's A, MX, SPF, DKIM and DMARC records were published in Cloudflare. Public DNS lookups returned them, and a real outbound message passed SPF, DKIM and DMARC at Mail-Tester.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Get the values from aaPanel</span></span><br />
Open <span style="font-weight: bold;" class="mycode_b">Mail Server → Mail Domain → DNS Record</span> for your domain. Keep this screen open. It shows the mail hostname, MX priority, SPF text, unique DKIM public key and DMARC value. You must use your own generated DKIM key.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Open Cloudflare DNS</span></span><br />
Select your domain in Cloudflare, then <span style="font-weight: bold;" class="mycode_b">DNS → Records</span>. Inspect existing records first. If you already use another mail provider, changing MX and SPF changes that existing setup; plan the migration before replacing records. Our lab had no previous MX record.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Add the mail A and MX records</span></span><br />
Click <span style="font-weight: bold;" class="mycode_b">Add record</span>. Select type A, name mail, and your VPS IPv4 address. Turn proxy status off so it reads <span style="font-weight: bold;" class="mycode_b">DNS only</span>, then Save.<br />
<br />
Add another record: type MX, name @, mail server mail.example.com, priority 10, TTL Auto. The MX target is a hostname, not an IP address or an https:// URL. Save.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Add sender-authentication TXT records</span></span><br />
Add each separately:<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">SPF:</span> type TXT, name @, content copied from aaPanel. Our dedicated lab used <br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>v=spf1 +a +mx -all</code></div></div> This permits the A/MX senders; it is not a universal value for domains using other services. Maintain one SPF policy per name and include all legitimate senders in that policy.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">DKIM:</span> type TXT, name default._domainkey in our lab, content copied in full from our domain's aaPanel screen. Your selector may differ. Copy the complete v=DKIM1 value, without the Copy button label. This publishes a public key; the private signing key stays on the server.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">DMARC:</span> type TXT, name _dmarc. Our lab used <br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>v=DMARC1;p=quarantine;rua=mailto:admin@example.com</code></div></div> Replace the report mailbox with an address you control. For a domain with existing senders, start by assessing alignment and a monitoring policy before enforcing quarantine/reject.<br />
</li>
</ul>
<br />
Our SMTP hostname also received a separate TXT SPF record at mail: <br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>v=spf1 ip4:YOUR_VPS_IPV4 -all</code></div></div> This describes the HELO hostname's permitted sender; it does not replace the root-domain SPF record.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Verify public resolution</span></span><br />
Check A, MX and each TXT name through a public DNS resolver. Then return to aaPanel and use <span style="font-weight: bold;" class="mycode_b">Already set, Verify domain name resolution</span>. aaPanel can temporarily display a cached Not Set result; check actual public DNS before changing correct records again.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">What comes next</span></span><br />
Create the mailbox and mail TLS certificate. PTR/reverse DNS belongs to the VPS provider, not this Cloudflare zone. Finally send a real test message: published records alone do not prove SPF/DKIM/DMARC pass on an actual message.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Screenshot: Cloudflare records used by the lab</span><br />
<img src="https://adminsforum.com/uploads/tutorials/mail-dns-branded-20261011.png" loading="lazy"  alt="[Image: mail-dns-branded-20261011.png]" class="mycode_img" /><br />
<span style="font-weight: bold;" class="mycode_b">Prerequisite:</span> <a href="https://adminsforum.com/Thread-guide-add-a-mail-domain-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Add your mail domain in aaPanel</a>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">aaPanel generates your mail-domain record values; Cloudflare publishes them when Cloudflare hosts your domain's authoritative DNS.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested:</span> The lab's A, MX, SPF, DKIM and DMARC records were published in Cloudflare. Public DNS lookups returned them, and a real outbound message passed SPF, DKIM and DMARC at Mail-Tester.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Get the values from aaPanel</span></span><br />
Open <span style="font-weight: bold;" class="mycode_b">Mail Server → Mail Domain → DNS Record</span> for your domain. Keep this screen open. It shows the mail hostname, MX priority, SPF text, unique DKIM public key and DMARC value. You must use your own generated DKIM key.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Open Cloudflare DNS</span></span><br />
Select your domain in Cloudflare, then <span style="font-weight: bold;" class="mycode_b">DNS → Records</span>. Inspect existing records first. If you already use another mail provider, changing MX and SPF changes that existing setup; plan the migration before replacing records. Our lab had no previous MX record.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Add the mail A and MX records</span></span><br />
Click <span style="font-weight: bold;" class="mycode_b">Add record</span>. Select type A, name mail, and your VPS IPv4 address. Turn proxy status off so it reads <span style="font-weight: bold;" class="mycode_b">DNS only</span>, then Save.<br />
<br />
Add another record: type MX, name @, mail server mail.example.com, priority 10, TTL Auto. The MX target is a hostname, not an IP address or an https:// URL. Save.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Add sender-authentication TXT records</span></span><br />
Add each separately:<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">SPF:</span> type TXT, name @, content copied from aaPanel. Our dedicated lab used <br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>v=spf1 +a +mx -all</code></div></div> This permits the A/MX senders; it is not a universal value for domains using other services. Maintain one SPF policy per name and include all legitimate senders in that policy.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">DKIM:</span> type TXT, name default._domainkey in our lab, content copied in full from our domain's aaPanel screen. Your selector may differ. Copy the complete v=DKIM1 value, without the Copy button label. This publishes a public key; the private signing key stays on the server.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">DMARC:</span> type TXT, name _dmarc. Our lab used <br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>v=DMARC1;p=quarantine;rua=mailto:admin@example.com</code></div></div> Replace the report mailbox with an address you control. For a domain with existing senders, start by assessing alignment and a monitoring policy before enforcing quarantine/reject.<br />
</li>
</ul>
<br />
Our SMTP hostname also received a separate TXT SPF record at mail: <br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>v=spf1 ip4:YOUR_VPS_IPV4 -all</code></div></div> This describes the HELO hostname's permitted sender; it does not replace the root-domain SPF record.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Verify public resolution</span></span><br />
Check A, MX and each TXT name through a public DNS resolver. Then return to aaPanel and use <span style="font-weight: bold;" class="mycode_b">Already set, Verify domain name resolution</span>. aaPanel can temporarily display a cached Not Set result; check actual public DNS before changing correct records again.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">What comes next</span></span><br />
Create the mailbox and mail TLS certificate. PTR/reverse DNS belongs to the VPS provider, not this Cloudflare zone. Finally send a real test message: published records alone do not prove SPF/DKIM/DMARC pass on an actual message.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Screenshot: Cloudflare records used by the lab</span><br />
<img src="https://adminsforum.com/uploads/tutorials/mail-dns-branded-20261011.png" loading="lazy"  alt="[Image: mail-dns-branded-20261011.png]" class="mycode_img" /><br />
<span style="font-weight: bold;" class="mycode_b">Prerequisite:</span> <a href="https://adminsforum.com/Thread-guide-add-a-mail-domain-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Add your mail domain in aaPanel</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Install SSL for aaPanel Mail Server]]></title>
			<link>https://adminsforum.com/Thread-guide-install-ssl-for-aapanel-mail-server</link>
			<pubDate>Sun, 11 Oct 2026 20:06:53 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-install-ssl-for-aapanel-mail-server</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Mail clients need a trusted certificate covering the server hostname they connect to, such as mail.example.com. A certificate covering only example.com and <a href="http://www.example.com" target="_blank" rel="noopener" class="mycode_url">www.example.com</a> is not sufficient for mail.example.com.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lab result:</span> A certificate for mail.adminslab.com was issued and deployed to the mail services. IMAP on port 993 and SMTP STARTTLS on port 587 both passed hostname and certificate-chain verification. The web site continued returning HTTP 200.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Check DNS and the certificate names</span></span><br />
Create the mail hostname A record pointing to your VPS and keep it DNS only on Cloudflare. Check whether you already have a valid certificate that explicitly includes mail.example.com. Do not select the website certificate merely because it belongs to the same parent domain.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Issue a hostname certificate</span></span><br />
Our lab used an HTTP-01 certificate issued through aaPanel's Website feature:<br />
1. Open <span style="font-weight: bold;" class="mycode_b">Website</span> and click <span style="font-weight: bold;" class="mycode_b">Add site</span>.<br />
2. Enter mail.example.com as the domain.<br />
3. Use a separate directory for this hostname. Do not replace an existing website's files.<br />
4. Leave FTP and database creation disabled for a validation-only site.<br />
5. Keep <span style="font-weight: bold;" class="mycode_b">Apply for SSL</span> selected and submit.<br />
6. Wait until the site appears with a valid certificate and a remaining-days value.<br />
<br />
Port 80 must be reachable for HTTP-01 validation. If you cannot use HTTP-01, aaPanel also offers DNS verification under <span style="font-weight: bold;" class="mycode_b">Domains → SSL Certificate → Let's Encrypt</span>. Manual DNS validation requires adding the exact challenge TXT record and needs a renewal plan; aaPanel warns that manually resolved certificates do not support automatic renewal.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Deploy the certificate to Mail Server</span></span><br />
Open <span style="font-weight: bold;" class="mycode_b">Mail Server → Mail Domain</span> and select the SSL status on the domain row. The dialog offers <span style="font-weight: bold;" class="mycode_b">Other certificate</span> and <span style="font-weight: bold;" class="mycode_b">Apply for SSL</span>.<br />
<br />
If an existing matching certificate is offered, inspect its certificate-domain list before selecting <span style="font-weight: bold;" class="mycode_b">Deploy</span>. In our lab that automatic selection initially offered only the root/www certificate, so we did not deploy that mismatched certificate.<br />
<br />
For a separately issued mail-host certificate, use <span style="font-weight: bold;" class="mycode_b">Other certificate</span>: paste its matching private key into KEY and its full certificate chain into CRT/PEM, then save. Obtain both from the same certificate entry. Never share the private key or put it in a tutorial screenshot. Our lab deployment was performed through the official mail plugin's certificate method; the encrypted-service checks below confirmed the result.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Test the mail endpoints</span></span><br />
Configure clients with mail.example.com, not the bare IP. Check IMAP TLS on 993 and SMTP STARTTLS on 587. The certificate should be trusted, unexpired and valid for that exact hostname. A working HTTPS website alone does not verify these mail endpoints.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Renewal and troubleshooting</span></span><br />
Monitor expiry and confirm that renewed files are redeployed to Postfix and Dovecot. Issuing a renewed website certificate does not by itself prove the mail-service copy was refreshed. Retest both endpoints after renewal.<br />
<br />
A name mismatch means the certificate lacks the hostname used by the client. An incomplete chain means intermediate certificates may be missing. A connection timeout requires checking the service, server firewall and provider firewall. Do not disable certificate verification to conceal an error.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Screenshot: mail-domain SSL status</span><br />
<img src="https://adminsforum.com/uploads/tutorials/mail-domain-branded-20261011.png" loading="lazy"  alt="[Image: mail-domain-branded-20261011.png]" class="mycode_img" /><br />
<span style="font-weight: bold;" class="mycode_b">Start here:</span> <a href="https://adminsforum.com/Thread-guide-add-a-mail-domain-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Add a Mail Domain in aaPanel Free Edition</a>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Mail clients need a trusted certificate covering the server hostname they connect to, such as mail.example.com. A certificate covering only example.com and <a href="http://www.example.com" target="_blank" rel="noopener" class="mycode_url">www.example.com</a> is not sufficient for mail.example.com.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Lab result:</span> A certificate for mail.adminslab.com was issued and deployed to the mail services. IMAP on port 993 and SMTP STARTTLS on port 587 both passed hostname and certificate-chain verification. The web site continued returning HTTP 200.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Check DNS and the certificate names</span></span><br />
Create the mail hostname A record pointing to your VPS and keep it DNS only on Cloudflare. Check whether you already have a valid certificate that explicitly includes mail.example.com. Do not select the website certificate merely because it belongs to the same parent domain.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Issue a hostname certificate</span></span><br />
Our lab used an HTTP-01 certificate issued through aaPanel's Website feature:<br />
1. Open <span style="font-weight: bold;" class="mycode_b">Website</span> and click <span style="font-weight: bold;" class="mycode_b">Add site</span>.<br />
2. Enter mail.example.com as the domain.<br />
3. Use a separate directory for this hostname. Do not replace an existing website's files.<br />
4. Leave FTP and database creation disabled for a validation-only site.<br />
5. Keep <span style="font-weight: bold;" class="mycode_b">Apply for SSL</span> selected and submit.<br />
6. Wait until the site appears with a valid certificate and a remaining-days value.<br />
<br />
Port 80 must be reachable for HTTP-01 validation. If you cannot use HTTP-01, aaPanel also offers DNS verification under <span style="font-weight: bold;" class="mycode_b">Domains → SSL Certificate → Let's Encrypt</span>. Manual DNS validation requires adding the exact challenge TXT record and needs a renewal plan; aaPanel warns that manually resolved certificates do not support automatic renewal.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Deploy the certificate to Mail Server</span></span><br />
Open <span style="font-weight: bold;" class="mycode_b">Mail Server → Mail Domain</span> and select the SSL status on the domain row. The dialog offers <span style="font-weight: bold;" class="mycode_b">Other certificate</span> and <span style="font-weight: bold;" class="mycode_b">Apply for SSL</span>.<br />
<br />
If an existing matching certificate is offered, inspect its certificate-domain list before selecting <span style="font-weight: bold;" class="mycode_b">Deploy</span>. In our lab that automatic selection initially offered only the root/www certificate, so we did not deploy that mismatched certificate.<br />
<br />
For a separately issued mail-host certificate, use <span style="font-weight: bold;" class="mycode_b">Other certificate</span>: paste its matching private key into KEY and its full certificate chain into CRT/PEM, then save. Obtain both from the same certificate entry. Never share the private key or put it in a tutorial screenshot. Our lab deployment was performed through the official mail plugin's certificate method; the encrypted-service checks below confirmed the result.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Test the mail endpoints</span></span><br />
Configure clients with mail.example.com, not the bare IP. Check IMAP TLS on 993 and SMTP STARTTLS on 587. The certificate should be trusted, unexpired and valid for that exact hostname. A working HTTPS website alone does not verify these mail endpoints.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Renewal and troubleshooting</span></span><br />
Monitor expiry and confirm that renewed files are redeployed to Postfix and Dovecot. Issuing a renewed website certificate does not by itself prove the mail-service copy was refreshed. Retest both endpoints after renewal.<br />
<br />
A name mismatch means the certificate lacks the hostname used by the client. An incomplete chain means intermediate certificates may be missing. A connection timeout requires checking the service, server firewall and provider firewall. Do not disable certificate verification to conceal an error.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Screenshot: mail-domain SSL status</span><br />
<img src="https://adminsforum.com/uploads/tutorials/mail-domain-branded-20261011.png" loading="lazy"  alt="[Image: mail-domain-branded-20261011.png]" class="mycode_img" /><br />
<span style="font-weight: bold;" class="mycode_b">Start here:</span> <a href="https://adminsforum.com/Thread-guide-add-a-mail-domain-in-aapanel-free-edition" target="_blank" rel="noopener" class="mycode_url">Add a Mail Domain in aaPanel Free Edition</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Add a Mail Domain in aaPanel Free Edition]]></title>
			<link>https://adminsforum.com/Thread-guide-add-a-mail-domain-in-aapanel-free-edition</link>
			<pubDate>Sun, 11 Oct 2026 20:05:27 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-add-a-mail-domain-in-aapanel-free-edition</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Add your email domain to aaPanel Mail Server, then assign the hostname that email clients and receiving servers will use.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested lab:</span> Ubuntu 22.04.5, aaPanel Free Edition 8.0.6, Mail Server 7.4.1. We added adminslab.com with the hostname mail.adminslab.com. Replace these examples with your own domain and VPS IP.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Prepare the domain and hostname</span></span><br />
The mail domain is the part after @ in an address: example.com in admin@example.com. The mail hostname is a server name such as mail.example.com. These are different fields. Install and initialize Mail Server first, and sign into the separate aaPanel.com account if the dashboard requests it.<br />
<br />
In your DNS provider, create an A record named mail pointing to the VPS public IPv4 address. On Cloudflare, select DNS only for this mail hostname. Wait until a public DNS lookup returns the correct IP before adding the domain. An orange-cloud proxy does not proxy ordinary SMTP or IMAP connections.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Open Add Domain</span></span><br />
1. Sign into your VPS aaPanel.<br />
2. Select <span style="font-weight: bold;" class="mycode_b">Mail Server</span> in the left menu.<br />
3. Open <span style="font-weight: bold;" class="mycode_b">Mail Domain</span>.<br />
4. Click <span style="font-weight: bold;" class="mycode_b">Add Domain</span>.<br />
5. Select <span style="font-weight: bold;" class="mycode_b">Manual</span> for DNS records when you will manage the records yourself. Automatic mode requires a configured DNS-provider integration; do not assume it is connected.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Fill the fields</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Domain name:</span> example.com, without https://, a path or an email username.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">A record:</span> mail.example.com, whose A record points to this VPS.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Domain quota:</span> total storage allowance for the mail domain. Our lab used 5 GB. This is a quota, not disk space reserved automatically.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Mailboxes:</span> permitted mailbox count. Our lab left the default 50; this is not 50 created users.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Catch All:</span> leave blank initially. Create a real destination mailbox before configuring catch-all forwarding.<br />
</li>
</ul>
Click <span style="font-weight: bold;" class="mycode_b">Confirm</span> once and wait for the adding-domain message to finish.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Verify the result</span></span><br />
The domain must appear in the Mail Domain table. Check its spelling, quota and mailbox limit. In our lab the new row showed adminslab.com, a 5 GB quota and a limit of 50. No mailbox is created by this operation.<br />
<br />
Click <span style="font-weight: bold;" class="mycode_b">DNS Record</span> on the domain row. aaPanel displays the domain-specific MX, SPF, DKIM and DMARC values. Use that screen for the next DNS lesson. DKIM keys are unique; never copy another site's key.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Troubleshooting</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">A record resolution failed:</span> verify the exact hostname, VPS IP, DNS-only setting and public DNS resolution.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Domain exists:</span> inspect the existing row instead of adding it again.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">SSL Not Set:</span> configure a certificate covering the mail hostname; adding the domain alone does not complete TLS.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Next:</span> Configure the required DNS records, create a mailbox and test encrypted connections. This guide ends at successful domain creation.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Screenshot: completed lab domain</span><br />
<img src="https://adminsforum.com/uploads/tutorials/mail-domain-branded-20261011.png" loading="lazy"  alt="[Image: mail-domain-branded-20261011.png]" class="mycode_img" /><br />
The screenshot shows the later completed setup: SSL and WebMail are separate follow-up steps.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Add your email domain to aaPanel Mail Server, then assign the hostname that email clients and receiving servers will use.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Tested lab:</span> Ubuntu 22.04.5, aaPanel Free Edition 8.0.6, Mail Server 7.4.1. We added adminslab.com with the hostname mail.adminslab.com. Replace these examples with your own domain and VPS IP.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Prepare the domain and hostname</span></span><br />
The mail domain is the part after @ in an address: example.com in admin@example.com. The mail hostname is a server name such as mail.example.com. These are different fields. Install and initialize Mail Server first, and sign into the separate aaPanel.com account if the dashboard requests it.<br />
<br />
In your DNS provider, create an A record named mail pointing to the VPS public IPv4 address. On Cloudflare, select DNS only for this mail hostname. Wait until a public DNS lookup returns the correct IP before adding the domain. An orange-cloud proxy does not proxy ordinary SMTP or IMAP connections.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Open Add Domain</span></span><br />
1. Sign into your VPS aaPanel.<br />
2. Select <span style="font-weight: bold;" class="mycode_b">Mail Server</span> in the left menu.<br />
3. Open <span style="font-weight: bold;" class="mycode_b">Mail Domain</span>.<br />
4. Click <span style="font-weight: bold;" class="mycode_b">Add Domain</span>.<br />
5. Select <span style="font-weight: bold;" class="mycode_b">Manual</span> for DNS records when you will manage the records yourself. Automatic mode requires a configured DNS-provider integration; do not assume it is connected.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Fill the fields</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Domain name:</span> example.com, without https://, a path or an email username.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">A record:</span> mail.example.com, whose A record points to this VPS.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Domain quota:</span> total storage allowance for the mail domain. Our lab used 5 GB. This is a quota, not disk space reserved automatically.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Mailboxes:</span> permitted mailbox count. Our lab left the default 50; this is not 50 created users.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Catch All:</span> leave blank initially. Create a real destination mailbox before configuring catch-all forwarding.<br />
</li>
</ul>
Click <span style="font-weight: bold;" class="mycode_b">Confirm</span> once and wait for the adding-domain message to finish.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Verify the result</span></span><br />
The domain must appear in the Mail Domain table. Check its spelling, quota and mailbox limit. In our lab the new row showed adminslab.com, a 5 GB quota and a limit of 50. No mailbox is created by this operation.<br />
<br />
Click <span style="font-weight: bold;" class="mycode_b">DNS Record</span> on the domain row. aaPanel displays the domain-specific MX, SPF, DKIM and DMARC values. Use that screen for the next DNS lesson. DKIM keys are unique; never copy another site's key.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Troubleshooting</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">A record resolution failed:</span> verify the exact hostname, VPS IP, DNS-only setting and public DNS resolution.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Domain exists:</span> inspect the existing row instead of adding it again.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">SSL Not Set:</span> configure a certificate covering the mail hostname; adding the domain alone does not complete TLS.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Next:</span> Configure the required DNS records, create a mailbox and test encrypted connections. This guide ends at successful domain creation.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Screenshot: completed lab domain</span><br />
<img src="https://adminsforum.com/uploads/tutorials/mail-domain-branded-20261011.png" loading="lazy"  alt="[Image: mail-domain-branded-20261011.png]" class="mycode_img" /><br />
The screenshot shows the later completed setup: SSL and WebMail are separate follow-up steps.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Install Mail Server in aaPanel Free Edition]]></title>
			<link>https://adminsforum.com/Thread-guide-install-mail-server-in-aapanel-free-edition</link>
			<pubDate>Sun, 11 Oct 2026 19:28:11 +0800</pubDate>
			<dc:creator><![CDATA[<a href="https://adminsforum.com/member.php?action=profile&uid=2">DEV</a>]]></dc:creator>
			<guid isPermaLink="false">https://adminsforum.com/Thread-guide-install-mail-server-in-aapanel-free-edition</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">Install the official Mail Server app in aaPanel Free Edition before adding your email domain or creating mailboxes. This lesson covers the installation task and service verification; DNS, certificates and delivery are separate lessons.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Test environment:</span> Ubuntu 22.04.5, aaPanel Free Edition 8.0.6, 2 vCPU, 4 GB RAM and a 40 GB disk. The app offered Mail Server 7.4.1 on 11 October 2026.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Check the VPS before installation</span></span><br />
Use a test server or take a recoverable backup first. Installing a mail server adds services and uses disk and memory; it is not just an extra button in the panel. Confirm that you have administrator access, free disk space and a domain whose DNS you control. Our lab had roughly 29 GB disk space available and 3 GB memory available before installation.<br />
<br />
Check whether another mail server already occupies the SMTP/IMAP ports. Do not stop an existing production mail service merely to make a new installer work. Our initial listener check showed no existing SMTP or IMAP service.<br />
<br />
Check outbound TCP port 25 with your provider. Our lab received an SMTP greeting from Google's receiving server, so that one outbound connection worked. This does not prove inbound port 25, recipient acceptance or inbox delivery. Providers can restrict port 25 independently of your local firewall.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Find the official Mail Server app</span></span><br />
1. Sign in to the aaPanel installed on your VPS.<br />
2. Select <span style="font-weight: bold;" class="mycode_b">App Store</span> in the left menu.<br />
3. Enter <span style="font-weight: bold;" class="mycode_b">Mail</span> in the app search box and press Enter.<br />
4. Find <span style="font-weight: bold;" class="mycode_b">Mail Server</span> with developer <span style="font-weight: bold;" class="mycode_b">official</span> and price <span style="font-weight: bold;" class="mycode_b">Free</span>.<br />
5. Check the supported operating systems in that row. Our Ubuntu 22 server is listed.<br />
6. Click <span style="font-weight: bold;" class="mycode_b">Install</span> on the Mail Server row.<br />
<br />
The separate <span style="font-weight: bold;" class="mycode_b">Anti-Spam Gateway</span> search result is a different app. Do not install it instead of Mail Server.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Start the installation task</span></span><br />
The installation window in our lab displayed <span style="font-weight: bold;" class="mycode_b">Mail Server 7.4.1</span>. Read the version, description and dependency warning before proceeding. If the plugin already exists, the installer warns that its files will be replaced.<br />
<br />
<img src="https://adminsforum.com/uploads/tutorials/mail-install-branded-20261011.png" loading="lazy"  alt="[Image: mail-install-branded-20261011.png]" class="mycode_img" /><br />
<span style="font-style: italic;" class="mycode_i">Installation window: check the official app and version, then select Install Now.</span><br />
<br />
Click <span style="font-weight: bold;" class="mycode_b">Install Now</span> once. aaPanel opens its Messages Box and adds <span style="font-weight: bold;" class="mycode_b">Install[mail_sys-7.4.1]</span> to the task queue. Open its execution log to follow progress. The app downloads software and installs dependencies, so this can take several minutes.<br />
<br />
Do not click Install repeatedly. A <span style="font-weight: bold;" class="mycode_b">Waiting install</span> label or a successful task-queue message means the task was queued; neither is a completed installation. Compilation output also does not mean the queue is frozen.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Verify the installed services</span></span><br />
<span style="font-weight: bold;" class="mycode_b">Verified result, 11 October 2026:</span> The installed plugin metadata reports Mail Server 7.4.1. Postfix, Dovecot and Rspamd report active. Redis responds but requires authentication. The lab website still responds successfully over HTTPS. No mailbox or external mail delivery is claimed at this stage.<br />
<br />
After the task completes, return to the app list and open the Mail Server management screen. Record the actual service state. Check any initialization or missing-dependency messages rather than assuming all mail services are ready because the plugin appears installed. In our lab the new Mail dashboard requires an aaPanel vendor account before its configuration controls become available. The VPS panel login alone does not satisfy that separate account requirement.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Sign in to the separate aaPanel account</span></span><br />
Open <span style="font-weight: bold;" class="mycode_b">Mail Server</span> from the left menu after the installation finishes. In our tested version, the management screen required an aaPanel.com account. This is different from the username/password used to enter your VPS panel. It is also different from the mailbox account you will create later.<br />
<br />
If you already have an aaPanel.com account, use its email address and password in the vendor sign-in window. If you register a new account, use an email address that already receives messages. Do not use an address on the new mail domain before you have configured that domain and created its mailbox. Complete any verification requested by the vendor. Our lab used an existing working email and the account was bound successfully.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">6. Initialize the mail-server environment</span></span><br />
On the Mail dashboard, follow the environment <span style="font-weight: bold;" class="mycode_b">Install</span> or restore prompt if it appears. The <span style="font-weight: bold;" class="mycode_b">Restoring the mail server environment</span> dialog checks HostName, Postfix, Dovecot, Redis, Rspamd, SQLite support and SELinux. Read every row before pressing Submit.<br />
<br />
Our lab initially failed <span style="font-weight: bold;" class="mycode_b">HostName</span> because it was only <span style="font-weight: bold;" class="mycode_b">websrv</span>. A mail hostname should be a full hostname, such as <span style="font-weight: bold;" class="mycode_b">mail.example.com</span>. Choose the name you will later use for the mail DNS A record. Our lab uses <span style="font-weight: bold;" class="mycode_b">mail.adminslab.com</span>. On our Ubuntu 22.04 lab, we set the static hostname over SSH:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>sudo hostnamectl set-hostname --static mail.example.com
hostname -f</code></div></div>Replace mail.example.com with your own hostname. This command changes the operating-system hostname; it does not create a DNS record or a PTR record. Existing servers may depend on their hostname, so check those dependencies before changing one.<br />
<br />
<img src="https://adminsforum.com/uploads/tutorials/mail-environment-branded-20261011.png?v=1" loading="lazy"  alt="[Image: mail-environment-branded-20261011.png?v=1]" class="mycode_img" /><br />
<span style="font-style: italic;" class="mycode_i">Environment check: all nine rows are Ready before selecting Submit.</span><br />
<br />
Return to the initialization dialog and click <span style="font-weight: bold;" class="mycode_b">Refresh</span>. All nine checks displayed <span style="font-weight: bold;" class="mycode_b">Ready</span> in our lab. Click <span style="font-weight: bold;" class="mycode_b">Submit</span> once and let the initialization log finish. aaPanel writes the mail-service configuration and starts the environment.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">7. Confirm the installation outcome</span></span><br />
After initialization, open <span style="font-weight: bold;" class="mycode_b">Mail Domain</span>. The <span style="font-weight: bold;" class="mycode_b">Add Domain</span> button should be available. An empty domain list is expected at this stage: you have installed the mail server, but have not added a mail domain yet.<br />
<br />
For an additional service check on our Ubuntu lab, we used:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>systemctl is-active postfix dovecot rspamd</code></div></div>All three returned <span style="font-weight: bold;" class="mycode_b">active</span>. These are installation checks. An active service does not prove that Internet email will arrive or reach an inbox. Domain, DNS, TLS and delivery tests follow in separate lessons.<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">What installation does not complete</span></span><br />
You still need a mail hostname, the domain's MX record, mailbox users, mail certificates and sender-authentication records. Reverse DNS is configured by the VPS provider. A website working over HTTPS does not prove email works.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Troubleshooting</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Still installing:</span> Read the latest execution-log lines. If dependencies are downloading or compiling, let the active task finish.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Download or package error:</span> Record the exact failing URL/package and error. Check connectivity and disk space before retrying.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Port conflict:</span> Identify the service already listening. Preserve an existing mail deployment rather than removing it blindly.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Mail features ask for an aaPanel account:</span> This vendor account is separate from the VPS panel login and the email mailbox. Follow the actual account flow if required.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Next lesson:</span> Add adminslab.com to Mail Server and configure mail.adminslab.com. Do not send verification emails to admin@adminslab.com until the mailbox and receiving DNS are ready.]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">Install the official Mail Server app in aaPanel Free Edition before adding your email domain or creating mailboxes. This lesson covers the installation task and service verification; DNS, certificates and delivery are separate lessons.</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Test environment:</span> Ubuntu 22.04.5, aaPanel Free Edition 8.0.6, 2 vCPU, 4 GB RAM and a 40 GB disk. The app offered Mail Server 7.4.1 on 11 October 2026.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">1. Check the VPS before installation</span></span><br />
Use a test server or take a recoverable backup first. Installing a mail server adds services and uses disk and memory; it is not just an extra button in the panel. Confirm that you have administrator access, free disk space and a domain whose DNS you control. Our lab had roughly 29 GB disk space available and 3 GB memory available before installation.<br />
<br />
Check whether another mail server already occupies the SMTP/IMAP ports. Do not stop an existing production mail service merely to make a new installer work. Our initial listener check showed no existing SMTP or IMAP service.<br />
<br />
Check outbound TCP port 25 with your provider. Our lab received an SMTP greeting from Google's receiving server, so that one outbound connection worked. This does not prove inbound port 25, recipient acceptance or inbox delivery. Providers can restrict port 25 independently of your local firewall.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">2. Find the official Mail Server app</span></span><br />
1. Sign in to the aaPanel installed on your VPS.<br />
2. Select <span style="font-weight: bold;" class="mycode_b">App Store</span> in the left menu.<br />
3. Enter <span style="font-weight: bold;" class="mycode_b">Mail</span> in the app search box and press Enter.<br />
4. Find <span style="font-weight: bold;" class="mycode_b">Mail Server</span> with developer <span style="font-weight: bold;" class="mycode_b">official</span> and price <span style="font-weight: bold;" class="mycode_b">Free</span>.<br />
5. Check the supported operating systems in that row. Our Ubuntu 22 server is listed.<br />
6. Click <span style="font-weight: bold;" class="mycode_b">Install</span> on the Mail Server row.<br />
<br />
The separate <span style="font-weight: bold;" class="mycode_b">Anti-Spam Gateway</span> search result is a different app. Do not install it instead of Mail Server.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">3. Start the installation task</span></span><br />
The installation window in our lab displayed <span style="font-weight: bold;" class="mycode_b">Mail Server 7.4.1</span>. Read the version, description and dependency warning before proceeding. If the plugin already exists, the installer warns that its files will be replaced.<br />
<br />
<img src="https://adminsforum.com/uploads/tutorials/mail-install-branded-20261011.png" loading="lazy"  alt="[Image: mail-install-branded-20261011.png]" class="mycode_img" /><br />
<span style="font-style: italic;" class="mycode_i">Installation window: check the official app and version, then select Install Now.</span><br />
<br />
Click <span style="font-weight: bold;" class="mycode_b">Install Now</span> once. aaPanel opens its Messages Box and adds <span style="font-weight: bold;" class="mycode_b">Install[mail_sys-7.4.1]</span> to the task queue. Open its execution log to follow progress. The app downloads software and installs dependencies, so this can take several minutes.<br />
<br />
Do not click Install repeatedly. A <span style="font-weight: bold;" class="mycode_b">Waiting install</span> label or a successful task-queue message means the task was queued; neither is a completed installation. Compilation output also does not mean the queue is frozen.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">4. Verify the installed services</span></span><br />
<span style="font-weight: bold;" class="mycode_b">Verified result, 11 October 2026:</span> The installed plugin metadata reports Mail Server 7.4.1. Postfix, Dovecot and Rspamd report active. Redis responds but requires authentication. The lab website still responds successfully over HTTPS. No mailbox or external mail delivery is claimed at this stage.<br />
<br />
After the task completes, return to the app list and open the Mail Server management screen. Record the actual service state. Check any initialization or missing-dependency messages rather than assuming all mail services are ready because the plugin appears installed. In our lab the new Mail dashboard requires an aaPanel vendor account before its configuration controls become available. The VPS panel login alone does not satisfy that separate account requirement.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">5. Sign in to the separate aaPanel account</span></span><br />
Open <span style="font-weight: bold;" class="mycode_b">Mail Server</span> from the left menu after the installation finishes. In our tested version, the management screen required an aaPanel.com account. This is different from the username/password used to enter your VPS panel. It is also different from the mailbox account you will create later.<br />
<br />
If you already have an aaPanel.com account, use its email address and password in the vendor sign-in window. If you register a new account, use an email address that already receives messages. Do not use an address on the new mail domain before you have configured that domain and created its mailbox. Complete any verification requested by the vendor. Our lab used an existing working email and the account was bound successfully.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">6. Initialize the mail-server environment</span></span><br />
On the Mail dashboard, follow the environment <span style="font-weight: bold;" class="mycode_b">Install</span> or restore prompt if it appears. The <span style="font-weight: bold;" class="mycode_b">Restoring the mail server environment</span> dialog checks HostName, Postfix, Dovecot, Redis, Rspamd, SQLite support and SELinux. Read every row before pressing Submit.<br />
<br />
Our lab initially failed <span style="font-weight: bold;" class="mycode_b">HostName</span> because it was only <span style="font-weight: bold;" class="mycode_b">websrv</span>. A mail hostname should be a full hostname, such as <span style="font-weight: bold;" class="mycode_b">mail.example.com</span>. Choose the name you will later use for the mail DNS A record. Our lab uses <span style="font-weight: bold;" class="mycode_b">mail.adminslab.com</span>. On our Ubuntu 22.04 lab, we set the static hostname over SSH:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>sudo hostnamectl set-hostname --static mail.example.com
hostname -f</code></div></div>Replace mail.example.com with your own hostname. This command changes the operating-system hostname; it does not create a DNS record or a PTR record. Existing servers may depend on their hostname, so check those dependencies before changing one.<br />
<br />
<img src="https://adminsforum.com/uploads/tutorials/mail-environment-branded-20261011.png?v=1" loading="lazy"  alt="[Image: mail-environment-branded-20261011.png?v=1]" class="mycode_img" /><br />
<span style="font-style: italic;" class="mycode_i">Environment check: all nine rows are Ready before selecting Submit.</span><br />
<br />
Return to the initialization dialog and click <span style="font-weight: bold;" class="mycode_b">Refresh</span>. All nine checks displayed <span style="font-weight: bold;" class="mycode_b">Ready</span> in our lab. Click <span style="font-weight: bold;" class="mycode_b">Submit</span> once and let the initialization log finish. aaPanel writes the mail-service configuration and starts the environment.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">7. Confirm the installation outcome</span></span><br />
After initialization, open <span style="font-weight: bold;" class="mycode_b">Mail Domain</span>. The <span style="font-weight: bold;" class="mycode_b">Add Domain</span> button should be available. An empty domain list is expected at this stage: you have installed the mail server, but have not added a mail domain yet.<br />
<br />
For an additional service check on our Ubuntu lab, we used:<br />
<div class="codeblock"><div class="title af-code-title"><span>Code:</span><button type="button" class="af-code-copy" aria-label="Copy code" title="Copy code"><i class="far fa-copy" aria-hidden="true"></i><span>Copy</span></button><span class="af-code-status" role="status" aria-live="polite"></span></div><div class="body" dir="ltr"><code>systemctl is-active postfix dovecot rspamd</code></div></div>All three returned <span style="font-weight: bold;" class="mycode_b">active</span>. These are installation checks. An active service does not prove that Internet email will arrive or reach an inbox. Domain, DNS, TLS and delivery tests follow in separate lessons.<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">What installation does not complete</span></span><br />
You still need a mail hostname, the domain's MX record, mailbox users, mail certificates and sender-authentication records. Reverse DNS is configured by the VPS provider. A website working over HTTPS does not prove email works.<br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Troubleshooting</span></span><ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Still installing:</span> Read the latest execution-log lines. If dependencies are downloading or compiling, let the active task finish.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Download or package error:</span> Record the exact failing URL/package and error. Check connectivity and disk space before retrying.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Port conflict:</span> Identify the service already listening. Preserve an existing mail deployment rather than removing it blindly.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Mail features ask for an aaPanel account:</span> This vendor account is separate from the VPS panel login and the email mailbox. Follow the actual account flow if required.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Next lesson:</span> Add adminslab.com to Mail Server and configure mail.adminslab.com. Do not send verification emails to admin@adminslab.com until the mailbox and receiving DNS are ready.]]></content:encoded>
		</item>
	</channel>
</rss>