The exact SPF record
Copy the example that matches your setup. Each one is a single TXT record; the host is shown as your DNS provider usually expects it (@ means the domain itself).
Proton Mail only
Type: TXT · Host: @ · 2 of 10 DNS lookups
v=spf1 include:_spf.protonmail.ch ~all
Proton Mail and an existing record
Type: TXT · Host: @ · 3 of 10 DNS lookups
v=spf1 include:_spf.protonmail.ch mx ~all
Proton says to add its include right after v=spf1 in the record you already have. Here the existing record allowed the domain's MX servers.
How SPF applies to Proton Mail mail
Receivers check SPF against the domain in the envelope sender (the MAIL FROM or bounce address). Proton Mail sends with your own domain there, so its include belongs in the SPF record on the domain you send from.
- Proton describes
~allas SoftFail (accepted but marked as failed) and warns that-allcan get legitimate mail rejected, for example when it is forwarded.
How to add it
- In Proton Mail, go to Settings, All settings, Domain names, and click Review next to your domain. Open the SPF tab.
- Copy the recommended record. If your domain already has an SPF record, add
include:_spf.protonmail.chto it right afterv=spf1instead. - Publish it as a TXT record at your DNS host and save.
- Return to the SPF tab: a green check mark shows Proton has found the include. Check the full record with the SPF Checker below.
DKIM and DMARC alignment
Proton gives you three DKIM CNAME records in its domain setup wizard; the host names and values must match the wizard exactly. Delete any old manual DKIM TXT record first. Proton's default DMARC policy is p=none; it recommends p=quarantine, and p=reject once legitimate mail passes DMARC.
DMARC passes when SPF or DKIM passes and the domain it checked matches your From domain. Our guide to SPF, DKIM and DMARC explains how the three fit together.
Common mistakes
- Two SPF records. A domain may publish only one record that starts with
v=spf1. With two, receivers return a permanent error and SPF fails for all your mail (RFC 7208 section 3.2). Merge every sender into one record. - More than 10 DNS lookups. Each
include,a,mx,existsandredirectcosts a lookup, nested ones included; over 10 is a PermError (section 4.6.4). Proton Mail's include costs 2 on its own. See how to fix too many SPF lookups. - Choosing
~allor-allwithout a plan. Proton Mail's documentation uses~all.-allasks receivers to reject unlisted servers;~allasks them to accept but mark the mail. Once DMARC is enforced, receivers act on DMARC instead. Read SPF soft fail vs hard fail before you choose.
Check your SPF record
See your live record, every nested include and the real lookup count. Free, reads public DNS only.
Building a new record? Open the SPF Record Generator with Proton Mail filled in.
Frequently asked questions
What is the SPF record for Proton Mail?
Add include:_spf.protonmail.ch to your domain's SPF record, right after v=spf1. Proton shows the exact recommended record in the SPF tab under Settings, Domain names.
Should I use -all with Proton Mail?
Proton's example uses ~all. It warns that -all (hard fail) can get legitimate email rejected, for example when SPF fails during forwarding. With DKIM and DMARC set up, ~all is a reasonable choice. See our soft fail vs hard fail guide.
How do I keep my existing SPF record when moving to Proton?
Don't create a second record. Proton says to add include:_spf.protonmail.ch to your existing record, right after v=spf1. Remove includes for services you no longer use so you stay within 10 lookups.
Sources
- Proton Support: Anti-spoofing for custom domains (SPF, DKIM, DMARC)
- RFC 7208: Sender Policy Framework (SPF)
Values checked against Proton Mail's documentation on October 9, 2026. Lookup counts measured with our SPF Checker on October 9, 2026; providers change their records, so check yours before relying on a number.
SPF records for other providers
- Microsoft 365include:spf.protection.outlook.com
- Google Workspaceinclude:_spf.google.com
- Zoho Mailinclude:zoho.com
- GoDaddyinclude:secureserver.net
- Fastmailinclude:spf.messagingengine.com
- Amazon SESinclude:amazonses.com
- SendGridinclude:sendgrid.net
- Mailguninclude:mailgun.org
- PostmarkNone needed
- MailchimpNone needed
- BrevoNone for standard sending; spf.brevo.com with a dedicated IP
- HubSpotAccount-specific (copy from HubSpot)
- KlaviyoNone needed
- Salesforceinclude:_spf.salesforce.com
- Zendeskinclude:mail.zendesk.com
- Freshdeskinclude:email.freshdesk.com
- IntercomNone needed
Related guides
SPF record syntax and examples
SPF record syntax explained: mechanisms, qualifiers and modifiers, with copy-ready examples for Microsoft 365, Google Workspace, subdomains and parked domains.
9 min read SPF, DKIM & DMARCHow to fix SPF PermError: too many DNS lookups
Why SPF breaks at 10 DNS lookups, how to count them, and step-by-step fixes for Microsoft 365 and Google Workspace domains with many senders.
8 min read SPF, DKIM & DMARCSPF softfail vs hardfail: should you use ~all or -all?
What ~all, -all and ?all mean in SPF, what receivers really do with each, how DMARC changes the choice, and which one to use for sending and parked domains.
8 min readLast updated