What Gmail, Yahoo and Outlook require
Large mail services require anyone who sends many messages to publish three records — SPF, DKIM and DMARC — and to offer a simple one-click unsubscribe. The threshold at Google and Microsoft is 5000 messages a day; Yahoo publishes no numeric threshold. For DMARC, a p=none policy is formally enough.
| Service | Threshold | What is mandatory | Nuance |
|---|---|---|---|
| Google (Gmail) | more than 5000 messages a day to personal Gmail addresses, from 1 February 2024 | SPF, DKIM, DMARC, alignment, one-click unsubscribe | complaints below 0.1%, never reach 0.3% |
| Yahoo | no numeric threshold published, requirements apply from February 2024 | SPF, DKIM, DMARC (p=none is allowed), one-click unsubscribe | complaints below 0.3%, unsubscribes within 2 days |
| Microsoft (Outlook.com) | more than 5000 messages a day | SPF, DKIM, DMARC at least p=none with alignment | from 5 May 2025 non-compliant mail goes to Junk first |
At Google, alignment means the domain in From matches the domain that passes SPF or DKIM — one of the two is enough. One-click unsubscribe is described in RFC 8058 (January 2017). Per Google’s help pages, bulk sender status is permanent: once you reach the threshold, you stay in that category.
Is p=none enough
For the requirements of all three services, yes. Google says the DMARC policy can be left at none, Yahoo allows p=none as long as DMARC passes, and Microsoft requires a policy of at least p=none. But meeting a requirement and protecting your domain are different tasks.
A p=none policy does nothing about forged messages: it only asks for reports. Anyone can send a message “on your behalf”, and the policy does not ask the recipient to reject it. Only p=quarantine or p=reject gives protection, so that is where you should be heading.
A safe path to p=reject
Move in steps: first collect reports at p=none, then enable p=quarantine and watch the reports for a few weeks, and only after that set p=reject. That way you do not lose legitimate mail from your CRM, site forms and mailing services.
- Make sure SPF and DKIM are set up for every source of the domain’s mail.
- Publish DMARC with p=none and a rua report address; collect reports until you see every source.
- Fix the sources that fail SPF or DKIM with alignment.
- Enable p=quarantine with a small pct and raise it while watching the reports.
- When legitimate mail passes, switch the policy to p=reject.
# step 1: reports only
_dmarc.example.com. IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"
# step 2: quarantine
_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"
# step 3: reject
_dmarc.example.com. IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc@example.com"There must be only one record: at each step you replace it rather than add a new one. The pct tag familiar from older guides, used to raise the share of messages gradually, is no longer needed: the current DMARC standard, RFC 9989 of May 2026, moved it to historic status because recipients applied it inaccurately at any value other than 0 and 100. SPF and DKIM setup is covered in the article on SPF, DKIM and DMARC.
How to check the records
DMARC, SPF and DKIM records live in DNS as TXT, and the dig command reads them. The check takes a minute and shows what recipients see, not what you configured in the panel.
dig TXT _dmarc.example.com +short
dig TXT example.com +short | grep -i spf
dig TXT selector._domainkey.example.com +shortReplace selector with your mail system’s DKIM selector name. No answer means no record, and you need to create it. If the mail server is yours, start with the articles on MX records and mail and setting up Postfix.
One-click unsubscribe
Marketing and subscription messages need two headers: List-Unsubscribe with an HTTPS address and List-Unsubscribe-Post with the value List-Unsubscribe=One-Click. Under RFC 8058 the message must carry a valid DKIM signature covering both headers; without it the recipient must not offer one-click unsubscribe.
List-Unsubscribe: <https://example.com/unsubscribe/abc123>
List-Unsubscribe-Post: List-Unsubscribe=One-ClickProcess unsubscribes quickly: Yahoo requires it within 2 days, and Google’s help pages recommend keeping within 48 hours. For mailings from your own server, mind your IP reputation — see the article on email deliverability and IP reputation.
Complaints, status and rejection
Google watches the share of spam complaints in Postmaster Tools: keep it below 0.1% and never let it reach 0.3% or more. If you ever reached the threshold of 5000 messages a day, bulk sender status stays for good, so it is worth preparing in advance rather than after the first refusals.
Refusals are possible too. Per Google’s help pages, from November 2025 Gmail is stepping up enforcement, and non-compliant messages may be rejected temporarily or permanently, for example with code 550 5.7.26.
At Outlook.com the threshold is the same. From 5 May 2025 messages from non-compliant domains are first routed to Junk. Microsoft announced rejection separately (error 550 5.7.515); check the date in its help pages: the source we read does not give one.
Frequently asked questions
Is p=none enough for Gmail to accept my mail?
For the requirements of Google, Yahoo and Outlook, yes, as long as DMARC passes with alignment on SPF or DKIM. But p=none does not protect the domain from forgery, so you need to move toward reject.
When should I move from quarantine to reject?
When the reports show that all the domain’s legitimate mail passes SPF or DKIM with alignment. There is no deadline: the guide is the reports, not the calendar.
Why does forwarding break DMARC?
Forwarding often breaks SPF, so set up DKIM: the signature survives forwarding as long as the message is not modified.
What should ZevsHost customers do?
On shared hosting cPanel sets up the domain’s mail and its DKIM signature; you only add the DMARC record to DNS and read the reports. On a VPS or dedicated server you run SPF, DKIM, DMARC and IP reputation yourself.