Plesk bundles Postfix + Dovecot (Linux) or MailEnable (Windows) with a clean UI for DNS, mailbox, and antivirus management. It's a solid stack for SMBs hosting their own mail on a VPS. Migrations into Plesk from cPanel or legacy self-hosted Exim, or out of Plesk to a managed provider (Google Workspace, Microsoft 365), are routine — and routinely painful when nobody measures placement on either side.
This article is about the one step 90% of migrations skip: baselining inbox placement on the old system, then re-testing after the cutover to confirm you didn't regress. Without that, "why is mail going to Spam now?" has zero answers.
Never cut over mail DNS without placement data from both the old and new mail path. If the old path was at 85% Inbox and the new one is at 40%, you know within 24 hours that the migration caused it — not a coincidence.
What typically breaks in a Plesk migration
- DKIM selector mismatch. Old system signed with selector
s1, Plesk signs withdefault. The old selector stays in DNS but the new outbound mail is signed with a missing key — pass becomes fail. - SPF include dropped. Old system included
spf.mandrillapp.comfor transactional mail; new SPF on Plesk only includesmx. Half your mail fails SPF overnight. - DMARC already at
p=reject. Previous team locked it down. First day after migration every unaligned message is rejected by Gmail. You discover this only when customers complain. - New IP has no reputation. Plesk VPS IP is fresh. Gmail and Microsoft grey-list or deliver to Spam for the first two weeks regardless of auth.
- PTR still points at old server. Forgotten at the VPS provider's panel. FCrDNS fails, mail gets scored down.
Pre-migration baseline (on the old system)
- Grab 20+ seed addresses covering Gmail, Outlook, Yahoo, Mail.ru, GMX, ProtonMail.
- Send a real message from the old system — same From address, same template as your highest-stakes mail (receipt, password reset, order confirmation).
- Record the placement per provider: Inbox / Promotions / Spam / Rejected / No-show.
- Also record the
Authentication-Resultsheader per provider — SPF, DKIM, DMARC verdicts on the old path. - Store this as your baseline. Date-stamp it.
Plesk mail server setup that matches
In Plesk > Tools & Settings > Mail Server Settings, make sure these are enabled before you migrate a single mailbox:
- DKIM signing: On. Plesk uses selector
default; match it to your old selector or publish both in DNS during the transition. - SPF check & policy: On for inbound. Not relevant outbound but confirms your config understanding.
- DMARC checks on inbound: On.
- Server-wide mail hostname: set to
mail.yourdomain.com— matches PTR. - Greylisting: Off for outbound-only servers; leaves inbound greylisting to your RBL stack.
# /etc/postfix/main.cf (Plesk-managed, edit via Plesk or CLI)
myhostname = mail.yourdomain.com
mydomain = yourdomain.com
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtp_tls_loglevel = 1
# DKIM/OpenDKIM milter (Plesk wires this when DKIM toggle is on)
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
# Rate-limit outbound per Plesk mailbox (PLESK_OUTGOING_MAIL_LIMITS)
smtpd_client_message_rate_limit = 50
anvil_rate_time_unit = 60sThe Plesk UI writes most of this for you when you tick the DKIM box. Verify by inspecting /etc/postfix/main.cf — don't trust the UI to have done it.
DKIM key continuity
Gmail penalises sudden DKIM key rotation. Carry the old key into Plesk if you can:
# On the old server
$ cat /etc/opendkim/keys/yourdomain.com/s1.private
# copy that file
# On Plesk server
$ mkdir -p /etc/opendkim/keys/yourdomain.com
$ cp s1.private /etc/opendkim/keys/yourdomain.com/s1.private
$ chown opendkim:opendkim /etc/opendkim/keys/yourdomain.com/s1.private
$ chmod 600 /etc/opendkim/keys/yourdomain.com/s1.private
# /etc/opendkim/KeyTable
s1._domainkey.yourdomain.com yourdomain.com:s1:/etc/opendkim/keys/yourdomain.com/s1.private
# /etc/opendkim/SigningTable
*@yourdomain.com s1._domainkey.yourdomain.com
$ systemctl restart opendkim postfixLeave the old public DKIM record in DNS for 30 days after the cutover. Some in-flight messages can still arrive and need to verify. You now have two valid DKIM keys; the new key is what Plesk signs with. Rotate the old key out after the overlap window.
Cutover day — low-TTL, dual-run, re-baseline
- 48 hours before: drop MX + DKIM + SPF TTLs to 300 seconds.
- T-0: flip MX to the new Plesk server. Leave the old server accepting mail for 48 hours (some caches take time).
- T+1h: re-run the placement test, same 20 seed addresses, same template, same From.
- Compare to baseline. If Gmail dropped from 100% to 30% Inbox, stop everything and inspect
Authentication-Results— you almost certainly have DKIM or PTR misalignment. - T+24h: re-test. New IP warming typically lifts placement 10-30 points in the first week.
- T+7d, T+14d, T+30d: re-test. Restore TTLs to 3600 after 14 days.
If your Plesk VPS is on a fresh IP, don't blast 50k messages on day one. Ramp from 50/day to 500/day to 5000/day over two weeks. Gmail and Microsoft reputation systems are unforgiving of cold-IP volume spikes, even with perfect auth.
Migrating out of Plesk to a managed provider
Moving from Plesk self-hosted to Google Workspace, Microsoft 365, Fastmail, Zoho? The playbook flips. Your baseline is Plesk. Risks are different:
- SPF gains new include:
include:_spf.google.comorinclude:spf.protection.outlook.com. Add it, don't remove the old Pleskmxmechanism until you cut the old server off. - DKIM is re-keyed at the provider. You cannot reuse your Plesk private key. Publish the provider-issued DKIM, keep your old one for 30 days.
- MX changes — dual-delivery is dangerous. Set a clear T-0 and remove the old Plesk MX within 48 hours. Split-brain mailboxes are worse than a brief outage.
Plesk migration deliverability checklist
- Placement baseline on the old system, 20+ seeds, stored and dated.
- DKIM keys copied or dual-published; both verifiable in DNS.
- SPF include list audited — every real sender covered, no
+all. - DMARC at
p=noneduring migration, tightened after 2 weeks clean. - PTR set at VPS provider, matches
hostname -fon Plesk server. - TTLs dropped pre-cutover.
- Placement re-test at T+1h, T+24h, T+7d.
- Old server accepting mail for 48h post-cutover.
Frequently asked questions
How long does Plesk's DKIM toggle take to propagate?
Can I run both old and new mail servers for a week?
What if Plesk's default DKIM selector conflicts with my existing one?
default. If your previous selector wass1 or mail, you can keep both in DNS simultaneously. OpenDKIM signs outbound with whichever selector Plesk is configured for. Rotate old key out after 30 days.Should I use Plesk's SpamAssassin for outbound too?
spamassassin -t before sending templates, or use a template-scoring step in staging. Production outbound doesn't need SA.