When Gmail returns 421 4.7.28, the useful question is not just "why was this message deferred?" but which sending identity did Gmail decide was moving too fast?
That distinction matters because Google can rate limit this error at more than one layer during warm-up:
Message-ID pattern or a URL domain in the messageSo 4.7.28 is not the same kind of signal as 4.7.27 or 4.7.30.
Those codes say SPF or DKIM did not pass. 4.7.28 says Gmail is seeing an unusual rate of mail and is temporarily slowing or blocking it.
Google documents that warm-up limits are tracked per domain and IP address, and specifically notes that DKIM and SPF quotas are domain-specific while the IP quota is shared by every sender using that IP. Source: Google's Email sender guidelines.
4.7.28Google's SMTP error reference lists several 4.7.28 variants, including unusual mail rate from:
Message-IDThat is why generic advice like "just slow down a bit" is usually incomplete.
You need to identify which quota bucket you hit before deciding whether the fix is:
If you treat every 4.7.28 like a pure IP reputation problem, you can waste days changing the wrong thing.
4.7.28 from Gmail's auth-specific deferralsDo this before changing warm-up pace.
If Gmail is returning:
4.7.27, fix SPF first4.7.30, fix DKIM first4.7.32, fix DMARC alignment first4.7.40 or 4.7.31, publish or fix DMARC firstThose are not normal warm-up throttles. They are direct authentication compliance failures.
If you need that mapping in one place, keep Gmail bulk sender error codes explained nearby while troubleshooting.
4.7.28 is different because Gmail can return it even when SPF, DKIM, DMARC, PTR, and TLS are all technically correct.
This is one of the more useful parts of Google's sender guidance, and it is often skipped.
When you hit quota and Gmail starts returning 4.7.28, Google says to:
This is not just retry advice. Google is explicitly telling you to back off, reset, and reintroduce concurrency gradually.
If your platform keeps blasting across many parallel connections during the recovery window, you are working against the guidance Gmail publishes for senders.
In practice, most sender warm-up 4.7.28 cases fall into one of these three buckets.
This is the version most teams think of first.
It usually looks like one of these situations:
Google's guidance is unusually explicit here: the IP address quota is shared for all senders that use that IP address. When the IP quota is hit, all domains using that IP stop sending mail through it until the rate is reduced. Source: Google's Email sender guidelines.
That one sentence explains a lot of confusing incidents.
If two domains share one IP and only one of them ramps aggressively, the other one can still feel the pain.
This catches teams that sign multiple streams with the same DKIM domain and assume separate IPs will isolate them.
Sometimes they will not.
Google says DKIM quotas are specific to your domain. So if several campaigns, business units, or providers all sign with the same d= identity, Gmail can still decide that domain-level behavior is too aggressive.
That is especially relevant during migrations and warm-up overlap periods where teams temporarily send the same visible brand from two platforms at once.
Check whether all of these share one signing identity:
If yes, the domain may be warming faster than you think.
This one is easy to miss because many teams think of SPF only as a pass/fail authentication mechanism.
But Google's sender guidance says SPF quotas are also domain-specific.
So if many streams reuse the same envelope-from namespace, such as bounce.example.com, Gmail may treat the aggregate volume on that SPF identity as the real pacing signal.
That can surprise teams that split visible From: addresses but leave the bounce domain architecture unchanged.
Start with the exact SMTP reply text, not just the code.
Google's SMTP reference includes variants that often tell you the quota surface directly:
That wording determines your next move.
Focus on:
Also review Shared IP vs dedicated IP for authenticated senders, because many teams think they own an IP reputation story that is actually shared.
Focus on:
d= valueLook at real delivered headers, not vendor setup screens. The DKIM-Signature header tells you the truth about the active d= domain.
Focus on:
Return-PathIf that part is fuzzy, Return-Path vs From: practical implications is the quickest refresher.
Follow Google's own advice and assume DKIM, SPF, and IP are all affected until proven otherwise.
That means the safe immediate action is not to keep half the traffic running on the theory that only one layer is limited.
4.7.28 even with clean authenticationThe common pattern is not "missing DNS record."
It is one of these:
Google's sender guidance explicitly recommends consistent sending rate, gradual increases, starting with engaged users, and avoiding sudden spikes or major infrastructure changes without warming the modified segment separately.
That is the operational heart of this issue. 4.7.28 is often Gmail saying, "this sender behavior changed faster than trust developed."
When 4.7.28 starts appearing during warm-up, this order usually gets to the cause fastest:
Message-ID.4.7.28, not 4.7.27, 4.7.30, 4.7.32, or 4.7.40.From: domainReturn-Path domaind= domainIf the evidence points to IP quota pressure:
Do not respond by rotating rapidly across many fresh IPs. That often looks worse, not better.
If Gmail is throttling a domain quota, the fix is often about identity design, not only raw speed.
For example:
news.example.com and another on notify.example.comThe principle is simple: if Gmail is counting volume by domain identity, stop making unrelated streams look like one sender.
This fits the broader warm-up advice in DMARC and sender domain warm-up: how to increase volume safely without triggering blocks.
One of the hardest 4.7.28 incidents to diagnose is this:
That can happen when the real problem is upstream of you:
If the throttle text points to IP or IP netblock, and your own ramp looks reasonable, this should move near the top of the suspect list.
Google Postmaster Tools compliance dashboard is useful here, especially for watching domain reputation, spam rate, and bulk-sender compliance.
But Postmaster Tools does not replace the SMTP reply text.
4.7.28 is one of those cases where the rejection wording often contains more tactical direction than the dashboard alone.
Use both together:
The goal is not to discover the maximum rate Gmail will barely tolerate.
The goal is to make the sender look stable again.
That usually means:
Recovery usually starts when the sender becomes boring again. Stable identity and steady pacing are more persuasive to Gmail than aggressive retry logic.
Gmail 4.7.28 during sender warm-up is not one single quota problem.
It can be an IP quota issue, a DKIM-domain quota issue, an SPF-domain quota issue, or a broader unsolicited-volume signal tied to your infrastructure or message pattern. Google's own guidance gives the most important response pattern: pause for 10 minutes, assume all three quota surfaces are affected if the reply is ambiguous, retry from one connection, and scale back up slowly.
Once that is paired with accurate identity mapping from Return-Path, DKIM d=, and sending IP, the fix becomes much more concrete and much less guessy.