Enhanced Status Code 4.7.40: Rate Limited - DMARC Record Missing or Invalid
Enhanced Status Code 4.7.40 means “Rate Limited - DMARC Record Missing or Invalid.” Google is throttling your mail because the sending domain publishes no readable DMARC record. It is the grace period before 5.7.40 begins rejecting outright.
421 4.7.40 Email rate limited. The sending domain has a missing or invalid DMARC record or policy
What does 4.7.40 mean?
Google returns 4.7.40 with a 421 reply when it rate limits mail from a domain whose DMARC record is missing or invalid. It is the deferral form of 5.7.40, and it exists because Google chose to phase the February 2024 sender requirements in rather than switching them on as hard rejections.
That phasing is the reason this code deserves attention. A sender with no DMARC record does not stop delivering, they simply deliver more slowly, and nothing in a normal delivery report says why. The requirement is minimal: a single TXT record at _dmarc.yourdomain.com containing v=DMARC1 and a policy, where p=none is sufficient and changes nothing about how your mail is treated.
What usually fails is not the decision to publish but the publishing itself. The record must be at _dmarc rather than the apex, v=DMARC1 must be the first tag, and exactly one record must exist at that name. DNS editors that insert smart quotes or wrap long values introduce characters that make a visually correct record unparseable. Verify what actually resolves rather than trusting what you typed.
How 4.7.40 plays out
4.7.40 replyWhere 4.7.40 sits: soft vs hard bounce
| Soft bounce (4xx) | Hard bounce (5xx) | |
|---|---|---|
| Nature | Temporary | Permanent |
| SMTP class | 4xx | 5xx |
| What to do | Let it retry | Suppress the address |
| Recoverable? | Often | No |
| 4.7.40 is | ✓ this code |
What each provider means by 4.7.40
A registered code does not oblige a provider to use it that way, and the large ones diverge. Match the wording in your own bounce, not the definition above.
Common causes of 4.7.40
- No DMARC record has been published for the sending domain
- The record was published at the apex rather than at _dmarc
- v=DMARC1 is missing or is not the first tag in the record
- Two DMARC records exist at _dmarc, leaving the policy indeterminate
- A DNS editor introduced smart quotes or a line break into the value
- A sending subdomain publishes its own broken record, overriding a valid apex policy
How to fix 4.7.40
- Publish v=DMARC1; p=none; rua=mailto:[email protected] at _dmarc.yourdomain.com
- Confirm the record resolves with DMARC Record Checker rather than trusting the DNS panel
- Ensure exactly one DMARC record exists at that name
- Check any subdomain you send from for its own conflicting record
- Collect aggregate reports for several weeks before tightening beyond p=none
- Watch queue latency rather than bounce rate, since this is a deferral