Skip to content
Start with 100 free verification credits
Qualisend
SPF setup guide

SPF, DKIM & DMARC for Proton Mail.

Proton Mail authenticates a custom domain through the Domain names section of your account settings, which walks you through five DNS tabs in order — Verify, MX, SPF, DKIM, and DMARC — each with a live green-tick checker that watches your DNS. Unlike a bulk ESP, Proton is your actual mailbox host, so \"sending as your domain\" here means your everyday mail from you@yourdomain.com. SPF is a genuine shared include (include:_spf.protonmail.ch) you merge into the one SPF record on your root domain; DKIM is three CNAME records that let Proton publish and auto-rotate 2048-bit keys signed as your own domain; and DMARC is a policy record Proton shows you but never writes to your DNS. One prerequisite most guides skip: custom domains require a paid Mail plan (Mail Plus, Proton Unlimited, Proton Family/Duo, or Proton for Business) — you can't add one on a free account.

SPF include
Your DNSAdd the CNAME / TXT records
Proton MailSigns & sends as your domain
The inboxSPF · DKIM · DMARC pass

Why authenticate Proton Mail?

Authenticating your Proton domain decides whether your mail reaches the inbox at all — privacy is Proton's pitch, but privacy is not authentication, and receivers grade you on records, not intentions. Since February 2024, Gmail and Yahoo have required every bulk sender (roughly 5,000+ messages a day) to pass SPF, DKIM, and DMARC with alignment, and Microsoft began enforcing the same on high-volume mail to Outlook.com/Hotmail in 2025. Even for a low-volume personal or small-business mailbox, an unauthenticated Proton custom domain draws a \"via\" notice, fails DMARC, and drifts toward spam — and worse, it leaves your domain open to spoofing because you've published nothing that tells the world which servers may send as you. There is one Proton-specific reason this matters even more here: Proton owns and manages the SMTP return-path for your outbound mail and doesn't let you customize it, so SPF can't be relied on to align to your domain. That makes DKIM — which Proton signs as d=yourdomain.com — the mechanism that actually carries your DMARC pass. Set up all three and your mail is cryptographically yours, the \"via\" tag disappears, DMARC passes on aligned DKIM, and the reputation you build accrues to your own domain.

The SPF reality for Proton Mail

Proton Mail is a genuine \"include\" provider: you add one shared mechanism, include:_spf.protonmail.ch, to the single SPF TXT record on your root domain — the full record is v=spf1 include:_spf.protonmail.ch ~all. This is a real shared include (every Proton custom-domain customer uses the same one), unlike CNAME-delegation ESPs. It costs just one DNS lookup toward the RFC 7208 limit of 10, and Proton explicitly recommends ending with ~all (softfail) rather than -all, so mail from a server you forgot to list is marked suspicious rather than hard-rejected. There is an important Proton-specific caveat, though: because Proton controls the envelope sender / Return-Path on your outbound mail and gives you no way to point it at your own domain (no em-style sending subdomain like SendGrid, no custom Return-Path), you should NOT count on SPF aligning to your domain for DMARC. Treat include:_spf.protonmail.ch as doing two useful jobs — authorizing Proton's outbound IPs and satisfying the raw SPF check — and lean on DKIM as your aligned mechanism, since Proton signs every message with d=yourdomain.com. Keep exactly one SPF TXT record on the domain: if you also send through Google Workspace, Microsoft 365, or a newsletter tool, merge every mechanism into that single v=spf1 line rather than publishing a second SPF record (two SPF records is itself a PermError). And each sending subdomain needs its own SPF — the record on yourdomain.com does not cover mail.yourdomain.com.

Step by step

In Proton
  1. 1

    Confirm a paid plan and add the domain

    Custom domains require a paid Mail plan — Mail Plus, Proton Unlimited, Proton Family/Duo, or a Proton for Business plan; free accounts can't add one. Sign in and go to Settings → All settings → Domain names (on Business plans it's under Organization → Domain names). Click Add domain, enter yourdomain.com, and Proton opens the setup wizard with its Verify / MX / SPF / DKIM / DMARC tabs.

In your DNS
  1. 2

    Add the ownership-verification TXT record

    On the Verify tab Proton shows a TXT record whose value is protonmail-verification=<a code unique to your domain>. Add it at your DNS host as a TXT record on the root (host @ or blank), then come back and let Proton re-check — the tab turns to a green tick once it detects the record. Leave this record in place; removing it later can un-verify the domain.

  2. 3

    Point MX at Proton

    On the MX tab, add two MX records on the root (@): mail.protonmail.ch at priority 10 and mailsec.protonmail.ch at priority 20. Delete any leftover MX records from a previous provider, or make sure Proton's have the lowest priority numbers, so inbound mail routes to Proton. MX is about receiving, not authentication, but Proton's wizard expects it and it's part of a clean setup.

  3. 4

    Add or merge the SPF record

    On the SPF tab Proton shows v=spf1 include:_spf.protonmail.ch ~all. Add it as a TXT record on the root (@). If a v=spf1 record already exists for another sender, don't create a second one — merge include:_spf.protonmail.ch into that single existing line, keeping one ~all at the end.

In Proton
  1. 5

    Reveal the three DKIM CNAME values

    Open the DKIM tab (on Business plans: Domain names → your domain → Review → DKIM). Proton displays three host/value pairs on the selectors protonmail, protonmail2, and protonmail3. Copy all three exactly — the target values contain an identifier unique to your domain.

In your DNS
  1. 6

    Publish the three DKIM CNAMEs

    Create three CNAME records: host protonmail._domainkey → protonmail.domainkey.<hash>.domains.proton.ch, protonmail2._domainkey → protonmail2.domainkey.<hash>.domains.proton.ch, and protonmail3._domainkey → protonmail3.domainkey.<hash>.domains.proton.ch, using the exact targets Proton showed. Keep the type as CNAME (not TXT), and if your registrar appends a trailing dot or auto-adds your domain name to the value, trim it so the target is an exact match.

  2. 7

    Publish the DMARC record

    On the DMARC tab, add a TXT record at host _dmarc with v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com. Start at p=none (monitor-only) so nothing about delivery changes while you confirm DKIM aligns; Proton's own recommendation for most domains is to then move up to p=quarantine. Keep just one _dmarc record for the whole domain.

In Proton
  1. 8

    Enable your address and set it as default

    After the tabs verify, make sure you actually have an address at the domain: Settings → Identity and addresses → Addresses. Create or enable you@yourdomain.com and set it as your default so outgoing mail is sent — and DKIM-signed — as your custom domain rather than your original proton.me / pm.me address.

Verify
  1. 9

    Watch the green ticks, then test a real message

    Each tab flips to a green tick as Proton detects the matching record (usually minutes, up to 48 hours). Don't stop there: send a message to a Gmail account, open it, and use ⋮ → Show original to confirm DKIM: PASS with d=yourdomain.com and DMARC: PASS. Then run the domain through a domain health check to confirm every record resolves.

Records to add

Proton Mail generates the exact values in its setup wizard — these show the shape of what you'll add at your DNS host.

TypeHostValue
TXT@protonmail-verification=abcdef1234567890abcdef1234567890Ownership verification from the Verify tab — illustrative; your code is unique. Keep it published.
MX@mail.protonmail.chPrimary inbound mail server, priority 10. Receiving, not authentication.
MX@mailsec.protonmail.chBackup inbound mail server, priority 20. Delete old MX records or keep Proton's lowest.
TXT@v=spf1 include:_spf.protonmail.ch ~allRoot SPF — keep exactly one SPF record; merge this include if you already have a v=spf1 line. Costs 1 DNS lookup. Proton recommends ~all.
CNAMEprotonmail._domainkeyprotonmail.domainkey.d3nc4x7wj5x2z.domains.proton.chDKIM selector 1 (auto-rotated). Illustrative — copy the exact target from Proton's DKIM tab; the d… hash is unique to your domain.
CNAMEprotonmail2._domainkeyprotonmail2.domainkey.d3nc4x7wj5x2z.domains.proton.chDKIM selector 2. All three are required for Proton's automatic key rotation.
CNAMEprotonmail3._domainkeyprotonmail3.domainkey.d3nc4x7wj5x2z.domains.proton.chDKIM selector 3. Illustrative — use the exact value the DKIM tab shows.
TXT_dmarcv=DMARC1; p=none; rua=mailto:dmarc@yourdomain.comYou add this yourself — one per domain. Start at p=none; Proton recommends stepping up to p=quarantine.

Keep exactly one SPF (v=spf1) TXT record on your root domain — merge every sender into it. Two SPF records is itself an error.

The 10-lookup budget

SPF is capped at a hard 10 DNS lookups — go over and it returns a permerror and stops validating everywhere. Here's what Proton Mail's setup costs against that budget.

SPF 10-lookup budget1 used · 9 free

Proton Mail adds 1 of your 10 lookups; ip4: and ip6: mechanisms are free.

DKIM

DKIM is where Proton does something genuinely different from most mailbox hosts, and it's the part that matters most for your deliverability. Instead of one static TXT key you paste, Proton has you publish three CNAME records on the selectors protonmail._domainkey, protonmail2._domainkey, and protonmail3._domainkey, each pointing to protonmail{,2,3}.domainkey.<hash>.domains.proton.ch (the <hash> is an identifier unique to your domain). Because these are CNAMEs delegated to Proton — not keys you hold — Proton keeps the private keys and uses the three selectors to rotate fresh 2048-bit keys automatically (roughly every six months) without you ever editing DNS again: there's always one active key signing mail while the others are retired and regenerated in the background. That's why all three are mandatory — publish only one and rotation eventually leaves your mail signed by a key your DNS doesn't advertise, and DKIM silently starts failing. Reveal the three values on the DKIM tab (Domain names → your domain → Review → DKIM), publish them exactly as shown, and wait for the tab's green tick; once Proton detects them it begins signing every outgoing message with d=yourdomain.com. That signature aligns to your organizational domain, which is what carries your DMARC pass — especially important for Proton, where SPF alignment can't be relied on. Two operational notes: if you previously set DKIM up the old way with a manual protonmail._domainkey TXT record, delete that TXT before adding the CNAMEs so they don't conflict; and on Cloudflare, set each CNAME to \"DNS only\" (grey cloud) or it won't resolve to the Proton host.

DMARC

DMARC is a separate policy record you publish yourself — Proton shows it on the DMARC tab but never writes it to your DNS. Add a TXT record at _dmarc.yourdomain.com starting with v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com. p=none is monitor-only: it changes nothing about delivery but asks receivers to email you aggregate (rua) reports so you can confirm your Proton mail is passing DKIM aligned to your domain. Once you've watched the reports for a week or two and every legitimate source is authenticating, tighten the policy — Proton's own guidance is to move up to p=quarantine as the recommended setting for most domains, and to p=reject for high-value domains that need the strongest anti-spoofing (the level Yahoo, PayPal, and eBay use). Ramp deliberately, though: Proton explicitly warns that quarantine/reject can break email forwarding and mailing lists, since a forwarded message loses SPF and relies entirely on DKIM surviving intact. Keep exactly one _dmarc record for the whole organizational domain no matter how many senders you use; subdomains inherit the parent policy (override a specific one with its own _dmarc record or the sp= tag). Because Proton signs aligned DKIM as d=yourdomain.com, a correctly configured Proton domain passes DMARC on DKIM even when SPF doesn't align — which is exactly why you must not skip the DKIM CNAMEs.

Check it actually worked

Don't trust the tabs' green ticks alone — they only confirm the records resolve, not that your mail authenticates end-to-end. Send a real test from your custom-domain address to a Gmail account, open it, and choose ⋮ → Show original. You want DKIM: PASS with signed-by / d=yourdomain.com (the active selector will be one of protonmail, protonmail2, or protonmail3, depending on where rotation currently sits) and DMARC: PASS. SPF will usually show a pass too, but note whether it's aligned to your domain or to Proton's return-path — if only DKIM aligns, that's expected on Proton and DMARC still passes on DKIM. A quick second opinion: send a message to a Mail-Tester address, which should score 10/10 with SPF and DKIM both green. You can spot-check the raw records with dig CNAME protonmail._domainkey.yourdomain.com, dig TXT yourdomain.com, and dig TXT _dmarc.yourdomain.com. Finally, run the domain through Qualisend's domain health check to confirm the SPF include, all three DKIM CNAMEs, and the DMARC record resolve cleanly and your SPF stays under the 10-lookup limit — and once aggregate reports start arriving, drop one into the DMARC report analyzer to confirm Proton shows up as an aligned, passing source.

Common gotchas

  • Coverage

    Custom domains require a paid Proton Mail plan (Mail Plus, Proton Unlimited, Proton Family/Duo, or Proton for Business). You can't add or authenticate a domain on a free account — this is the first thing to check if the Domain names section won't let you proceed.

  • DNS setup

    Don't rely on SPF for DMARC on Proton. Proton controls the outbound return-path and gives you no way to customize it, so SPF may not align to your domain. DKIM — signed as d=yourdomain.com via the three CNAMEs — is the mechanism that carries your DMARC pass. Never skip DKIM.

  • DNS setup

    All three DKIM CNAMEs are required. Proton rotates 2048-bit keys across the protonmail, protonmail2, and protonmail3 selectors; publish only one and rotation eventually leaves outgoing mail signed by a key your DNS doesn't advertise, so DKIM silently starts failing weeks later.

  • DNS setup

    The DKIM CNAME value must be an exact match. Many registrars append a trailing period or auto-add your domain, turning the target into something Proton's checker rejects — trim it so it matches the wizard exactly, or the green tick never appears.

  • DNS setup

    Migrating from the old TXT-based DKIM? Delete the legacy protonmail._domainkey TXT record before adding the CNAMEs. A stale TXT and the new CNAME on the same host conflict and DKIM won't validate.

  • DNS setup

    On Cloudflare, set every DKIM CNAME to DNS only (grey cloud). An orange-cloud proxied CNAME won't resolve to *.domains.proton.ch and verification fails — a very common Proton-on-Cloudflare gotcha.

  • Breaks auth

    Keep exactly one SPF TXT record. If you also send via Google Workspace, Microsoft 365, or a newsletter tool, merge include:_spf.protonmail.ch into the single v=spf1 line — two SPF records is a PermError. And each sending subdomain needs its own SPF, DKIM, and DMARC.

Build your SPF record

Proton Mail is pre-selected below. Add any other platforms you send through, then publish the single merged record.

1

Sending sources

Search for each platform you send email through and tick it.

Selected
Guide →
2

This domain's own servers

Authorize the domain itself, if it sends mail directly (not through a platform above).

3

Other senders & IPs

Anything not in the list — another provider's SPF host, or specific IP addresses.

We add the include: prefix — enter the hostname your provider documents.

4

Policy for everyone else

What receivers should do with mail from any server not listed above (the all mechanism).

Your SPF record1/10 DNS lookups
v=spf1 include:_spf.protonmail.ch ~all
  • Publish it as a TXT record at your root domain — host @ (the bare domain), value the full string above.
  • Keep only one SPF record per domain. Merge every sending source into this single line — a second TXT record starting v=spf1 makes both invalid.
  • Stay at or under 10 DNS lookups. Each include:, a and mx counts, and an include can trigger more lookups inside itself — ip4: and ip6: are free.

Authentication published? The next step is sending to a clean, verified list.

Verify a list

Proton Mail SPF — FAQ

Related reading

Once it's published, confirm everything resolves with the domain health check, then read who's sending as you with the DMARC report analyzer. Browse all sending sources in the generator. Authentication is only half of deliverability, though — a listed sending IP or domain still lands you in spam no matter how clean your SPF is, so it's worth watching the blacklists with blacklist monitoring.

Authenticated — now keep the list clean

Passing SPF, DKIM, and DMARC gets you to the inbox; a clean list keeps you there. Verify yours — start free with 100 credits, no card required.

Start verifying