Plesk does more of the email authentication work for you than cPanel does. The default DNS
template already publishes SPF and DMARC records, and DKIM signing is one checkbox away.
The trouble is in the defaults themselves: the DMARC record Plesk ships uses p=quarantine
with strict alignment. That's fine for a domain that only sends through Plesk's Postfix. It
causes silent spam-foldering as soon as a customer adds Mailchimp, SendGrid, or Google
Workspace.
This guide is for operators running Plesk Obsidian on Linux with Postfix. It covers the order that actually fixes deliverability: reverse DNS, then DKIM, then SPF, then DMARC. It's the Plesk companion to our cPanel deliverability checklist. The DNS records are the same on both panels; the panel steps are not.
1. Fix reverse DNS and the SMTP greeting first
Gmail and Outlook do a forward-confirmed reverse DNS check on every connecting IP. If the
PTR record is missing, or doesn't match the name Postfix announces in its EHLO, no amount
of DKIM will save you.
Set the PTR at your infrastructure provider (Hetzner, OVH, Vultr, AWS, and so on). Plesk can't set it. Then check that both sides agree:
postconf -h myhostname
dig +short -x 198.51.100.42
dig +short A server1.example.com
All three must line up: the PTR returns server1.example.com, which resolves back to
198.51.100.42, and Postfix greets with the same name.
Multi-IP servers
If subscriptions sit on dedicated IPs, go to Tools & Settings → Mail Server Settings and look at Outgoing mail mode. The default sends everything from the server's main IP. If you switch to sending from domain IP addresses, every one of those IPs needs its own matching PTR. A dedicated IP with no rDNS is worse than a shared IP that has one. Unless you have a reason to isolate a sender's reputation, leave the default.
2. Enable DKIM signing
DKIM in Plesk has two switches, and both must be on.
Server-wide permission
In Tools & Settings → Mail Server Settings, tick Allow signing outgoing mail under DKIM spam protection. Or from the shell:
plesk bin mailserver --sign-outgoing-mail true
Per-domain signing
In the subscription, go to Mail → Mail Settings, select the domains, click Activate/Deactivate Services, and enable Use DKIM spam protection system to sign outgoing email messages. For an existing fleet, run it from the shell instead:
for domain in $(plesk db -Ne "SELECT name FROM domains WHERE parentDomainId=0"); do
plesk bin domain_pref --update "$domain" -sign_outgoing_mail true
done
Plesk generates a keypair and stores the private key under /etc/domainkeys/<domain>/. If
Plesk is authoritative for the zone, it also publishes two TXT records:
default._domainkey.example.com: the public key, using selectordefault_domainkey.example.com: the DKIM policy record
Since Plesk Obsidian 18.0.55, new keys are 2048-bit and the panel offers no selector. Keys generated on older versions stay 1024-bit until you regenerate them. Check yours:
dig +short TXT default._domainkey.example.com | wc -c
A 1024-bit key comes out at around 250 characters, and a 2048-bit key at over 400.
3. Check the SPF record
The server-wide DNS template (Tools & Settings → DNS Settings) ships this SPF record:
v=spf1 +a +mx +a:server1.example.com -all
For a domain that only sends through Plesk, that's correct as shipped. The -all hardfail
is stricter than cPanel's ~all default. That's fine, but it means any sender you forget
to list gets rejected.
When a customer adds a third-party sender, merge everything into one record. Two SPF TXT records on the same name is a permanent error, and receivers treat it as a fail:
v=spf1 +a +mx +a:server1.example.com include:_spf.google.com include:sendgrid.net ~all
Drop to ~all while you onboard new senders and watch DMARC reports. Go back to -all once
the reports are clean. Keep the record under 10 DNS lookups: every include, a, and mx
counts.
Inbound SPF checking
The same Mail Server Settings page has Switch on SPF spam protection, which checks
incoming mail. Use the mode that rejects only on an explicit fail. Stricter modes that
also reject on softfail and neutral bounce legitimate mail from badly configured senders,
and your customers will blame you, not the sender.
4. Fix the DMARC default before it bites
Plesk's default template publishes:
_dmarc.example.com. TXT "v=DMARC1; adkim=s; aspf=s; p=quarantine"
There are three problems with that:
- Strict alignment (
adkim=s; aspf=s) needs an exact domain match. Most ESPs sign with a subdomain such asem1234.example.com, or send with a bounce domain on a subdomain. Under strict alignment those messages fail DMARC even when DKIM and SPF pass. p=quarantinefrom day one means those failures go straight to spam, with no warning.- No
ruatag, so you get no aggregate reports and never learn what's failing.
For a mixed-sender domain, replace it with relaxed alignment and reporting:
plesk bin dns --del example.com -txt "v=DMARC1; adkim=s; aspf=s; p=quarantine" -domain _dmarc
plesk bin dns --add example.com -txt "v=DMARC1; p=none; rua=mailto:dmarc@example.com; fo=1" -domain _dmarc
Run p=none for two to four weeks, read the aggregate reports, fix whatever fails, then
move to p=quarantine and finally p=reject. For domains that only send through Plesk,
the shipped default is fine, but add an rua tag anyway.
To change the default for new domains, edit the _dmarc record in Tools & Settings → DNS
Settings. Template edits don't touch existing zones until you click Apply DNS Template
Changes, and that click overwrites per-domain customisations. Apply it only to the
domains you choose.
5. When Plesk isn't the DNS host
None of the above gets published if the domain's nameservers point at Cloudflare, Route 53, or the registrar. Plesk still signs mail, but receivers can't find the key, so every message fails DKIM. This is the single most common "DKIM enabled but not working" ticket.
Copy the records out of Plesk's local zone and add them at the external DNS host:
dig @127.0.0.1 +short TXT default._domainkey.example.com
dig @127.0.0.1 +short TXT example.com
dig @127.0.0.1 +short TXT _dmarc.example.com
If you run your own secondary nameservers, the Slave DNS Manager guide keeps Plesk authoritative and avoids this problem completely.
6. Verify end to end
Send a message to a Gmail address, open it, and click Show original. You want PASS
on all three lines: SPF, DKIM, and DMARC. From the shell, confirm the public records:
dig +short TXT example.com | grep spf1
dig +short TXT default._domainkey.example.com
dig +short TXT _dmarc.example.com
Authentication only proves who sent a message. It does nothing for a server that's relaying spam. Pair it with Plesk outbound mail throttling so one compromised mailbox can't burn the IP reputation you just built, and keep an eye on blocklists with Imunify360 reputation management.
Why does Plesk say DKIM is enabled but Gmail shows dkim=none?+
How do I change the DKIM key length in Plesk?+
What is the default DMARC record in Plesk?+
Can I have two SPF records for one domain in Plesk?+
Does Plesk set the PTR record for my server IP?+
Next steps
- Get or move a license for the server: see Plesk editions and pricing or activate one at /plesk-license.
- Sign the zones you now publish SPF and DKIM in: Plesk DNSSEC extension setup.
- Running both panels? Compare with the cPanel deliverability checklist.