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).
Optional custom Return-Path (CNAME, not TXT)
Type: CNAME · Host: pm-bounces
pm.mtasv.net
Your main domain on Microsoft 365 stays as it is
Type: TXT · Host: @ · 1 of 10 DNS lookups
v=spf1 include:spf.protection.outlook.com -all
Your main domain on Google Workspace stays as it is
Type: TXT · Host: @ · 1 of 10 DNS lookups
v=spf1 include:_spf.google.com ~all
How SPF applies to Postmark mail
Postmark sends with a bounce (MAIL FROM) address on a domain it manages, so receivers check SPF there, not on your domain. You don't add anything to your SPF record for it; your domain is authenticated with DKIM instead.
- Either DKIM or SPF alignment is enough to pass DMARC, so DKIM alone covers Postmark mail.
- Postmark's custom Return-Path is always a subdomain, so keep
aspf=r(relaxed, the default) in your DMARC record. Withaspf=s, Postmark mail can't pass DMARC through SPF.
How to add it
- Set up DKIM for your sending domain in Postmark first: Postmark calls it the standard for email authentication.
- If you want SPF alignment too, add a CNAME record
pm-bounces(the default label) pointing topm.mtasv.net. - In Postmark, open Signatures, choose DNS Settings for your domain and enter the Return-Path you created.
- Leave your main domain's SPF record unchanged.
DKIM and DMARC alignment
Postmark recommends DKIM as the main way to authenticate. With DKIM on your domain and an optional pm-bounces Return-Path, Postmark mail passes DMARC through both checks. Keep SPF alignment relaxed in your DMARC record.
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). Postmark adds nothing to your count, which is one more reason not to add an include for it. See how to fix too many SPF lookups. - Choosing
~allor-allwithout a plan.-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. - Adding a Postmark include to your root SPF record. Postmark says it is no longer required; it only spends lookups.
- Setting
aspf=sin DMARC while relying on Postmark's Return-Path for SPF alignment.
Check your SPF record
See your live record, every nested include and the real lookup count. Free, reads public DNS only.
Building a record for your other senders? Use the SPF Record Generator.
Frequently asked questions
Do I need to add Postmark to my SPF record?
No. Postmark says it is no longer required: receivers check SPF on the Return-Path domain, and Postmark's default Return-Path already uses its own SPF record. Your main domain's record stays as it is.
How do I make Postmark mail pass DMARC with SPF?
Add a custom Return-Path: a CNAME such as pm-bounces.example.com pointing to pm.mtasv.net, then enter it under Signatures, DNS Settings. SPF then aligns with your From domain under relaxed alignment.
Can I use aspf=s in DMARC with Postmark?
Not if you need SPF alignment. Postmark's custom Return-Path is always a subdomain of your domain, so it can only align under relaxed SPF alignment (aspf=r, the default). DKIM alignment is unaffected.
Sources
- Postmark Support: How do I set up SPF for Postmark?
- Postmark Support: How do I add a custom Return-Path?
- RFC 7208: Sender Policy Framework (SPF)
Values checked against Postmark'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
- Proton Mailinclude:_spf.protonmail.ch
- Amazon SESinclude:amazonses.com
- SendGridinclude:sendgrid.net
- Mailguninclude:mailgun.org
- 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