Records to publish
Hosts are full names, with {domain} standing for your domain; most DNS panels want only the part before it (@ for the domain itself). Anything else in {braces} is specific to your Proton Mail account: copy it from Proton Mail's setup screen, which shows the exact record.
| For | Type | Host | Value |
|---|---|---|---|
| Domain verification | TXT | {domain} | protonmail-verification={token}Copy it from Settings > Domain names > Verify, and keep it after verification. |
| Receiving mail | MX | {domain} | priority 10 · mail.protonmail.chDelete other MX records, or give Proton's the lowest priority number. |
| Receiving mail | MX | {domain} | priority 20 · mailsec.protonmail.ch |
| SPF | TXT | {domain} | v=spf1 include:_spf.protonmail.ch ~allProton calls SPF not required but strongly recommended, and warns that -all can cause delivery problems. |
| DKIM | CNAME | protonmail._domainkey.{domain} | protonmail.domainkey.{id}.domains.proton.ch{id} is specific to your domain; copy all three from Settings > Domain names > Review > DKIM. |
| DKIM | CNAME | protonmail2._domainkey.{domain} | protonmail2.domainkey.{id}.domains.proton.ch |
| DKIM | CNAME | protonmail3._domainkey.{domain} | protonmail3.domainkey.{id}.domains.proton.ch |
| DMARC optional | TXT | _dmarc.{domain} | v=DMARC1; p=none; rua=mailto:{report-address}Proton's setup suggests p=quarantine but warns that quarantine or reject can hurt mail through mailing lists or forwarding. |
SPF
Recommended, though Proton calls it not required: add include:_spf.protonmail.ch to the SPF record at your root domain, for example v=spf1 include:_spf.protonmail.ch ~all. It authorizes Proton's servers for your domain; Proton doesn't say which Return-Path domain it uses, so DKIM is the documented way its mail aligns.
DKIM
Three CNAMEs, protonmail, protonmail2 and protonmail3 under _domainkey, point to keys Proton hosts under domains.proton.ch; copy them exactly from the DKIM tab. Proton generates a new 2048-bit key every six months behind those CNAMEs, so the records never change, and it starts signing only after it detects them.
DMARC alignment
DKIM aligns: once the three CNAMEs verify, Proton signs mail from your custom domain with keys published under it. SPF may also align, but Proton doesn't document its Return-Path domain.
Common mistakes
- Only one SPF record: merge include:_spf.protonmail.ch into an existing record right after v=spf1.
- Use include:_spf.protonmail.ch: the include:_spf.proton.me printed on one Proton marketing page doesn't resolve, so an SPF record with it fails.
- On Cloudflare, set the DKIM CNAMEs to DNS only, or the records won't propagate.
- An old manual DKIM TXT record must be deleted before you add the CNAMEs, and DKIM stops signing once it's gone, so add the CNAMEs right away.
- Keep the protonmail-verification TXT after verification, because Proton re-checks domain ownership with it.
- Create your addresses in Proton before switching MX, or mail to addresses that don't exist yet is lost.
Check that it worked
DNS changes can take a few minutes to show. Then run the free checks, no account needed:
How EmailSecOps recognises Proton Mail
A domain check names the services it finds in your DNS, leftovers from older setups included, so you can see which senders are set up and which are missing a key:
- SPF include, current or legacy: _spf.protonmail.ch
- Default DKIM selectors: protonmail, protonmail2, protonmail3
- DKIM keys delegated (CNAME) to *.domains.proton.ch
Questions
What SPF record does Proton Mail need?+
What are the DKIM records for Proton Mail?+
Does Proton Mail mail pass DMARC?+
Do I need a separate DMARC record for Proton Mail?+
Sources
- How to use a custom domain with Proton Mail
- Anti-spoofing for custom domains (SPF, DKIM, and DMARC)
- Problems with configuring CNAME records
- How to use a custom domain from Cloudflare with Proton Mail
- How to use a custom domain from Squarespace with Proton Mail
- Introducing DKIM key management (Proton news)