Permanent versus transient failure codes
SMTP delivery status codes in the 5.x.x range indicate a permanent failure — the address is invalid, doesn't exist, or the domain rejected it outright, and retrying won't help. Codes in the 4.x.x range are transient — a temporary condition like a full mailbox or greylisting, where a later retry can succeed. Treating both the same way wastes effort on dead addresses and risks giving up too early on ones that would have gone through.
Group by recipient domain before anything else
Before touching copy, DNS, or sending infrastructure, group the failures by the recipient's domain. A spike concentrated at one provider points toward a provider-specific issue or a data-quality problem with that segment of the list; a spike spread evenly across many domains points toward something about the sending side itself.
Working the 60-message scenario
A 60-message batch returns nine failures: six 5.1.x address failures spread across mixed domains, and three 4.x.x deferrals concentrated at one provider. The mixed-domain permanent failures look like ordinary list decay — invalid or changed addresses, unrelated to sending reputation. The provider-concentrated deferrals are the piece worth investigating further, since they're isolated rather than spread across the whole batch.
What to do with each category
Suppress the permanent 5.1.x address failures immediately — retrying them again won't change the outcome and repeated attempts to dead addresses can itself look bad to receivers. Hold the transient 4.x.x deferrals for a scheduled retry rather than resending immediately, since an immediate resend to a temporary condition sometimes just repeats the same failure.
Check whether the list source is a variable
If the failing addresses trace back to a specific import batch or data source, that's worth flagging separately from any deliverability concern — a bad list source produces bounces regardless of how healthy the sending domain is, and fixing the sending side won't fix a data problem.
What not to touch yet
Until the failure pattern is understood, changing DNS records, rewriting message copy, or adjusting sending volume are all premature — any one of those changes, made before the cause is known, makes it harder to tell afterward what actually fixed (or didn't fix) the spike.
Read the bounce message text, not just the code
The numeric status code narrows the category, but the accompanying diagnostic text from the receiving server often names the actual reason — mailbox full, domain doesn't exist, policy rejection, greylisting — which can point toward a more specific fix than the code alone. Most delivery platforms surface this text alongside the code; it's worth reading rather than triaging on the code in isolation.
A bounce spike can sometimes mean the list got healthier
Purchasing or importing an older list and running it for the first time can produce a burst of bounces from addresses that were valid when collected but have since been abandoned or belong to employees who've left. This looks alarming in the first batch but is a one-time data-quality correction rather than an ongoing sending problem, and it's worth distinguishing from a spike caused by something about current sending behavior.
Building a standing triage habit, not a one-time response
Treating this process — classify by code, group by domain, check list source, suppress permanents, hold transients for retry — as a repeatable checklist rather than something worked out fresh each time makes triage faster and more consistent when a spike does happen. Writing the sequence down once, even briefly, is worth doing before it's needed under pressure.
Over time, comparing bounce patterns across multiple spikes can also reveal recurring root causes — a specific list source that consistently produces more failures than others, for example — that are easy to miss when each spike is investigated in isolation.
Why order of operations matters here
Classifying and grouping before making any changes isn't just procedural caution — acting first and diagnosing afterward destroys the exact evidence (which addresses failed, from which domains, with what codes) that would have made the actual cause identifiable. A few minutes of triage before any corrective action preserves information that's often impossible to reconstruct once changes have already been made.
It's also useful to keep a simple running log of past spikes and their eventual root cause, since patterns that recur — the same list source, the same recipient domain, the same time of month — become much easier to spot with a written history to compare against than by relying on memory alone.
This process scales down as well as it scales up — a solo sender running a handful of small batches a week benefits from the same classify-before-you-act discipline as a larger operation, just applied to a shorter, more manageable list of failures each time.
The habit of writing the process down once and following it consistently matters more than any single technical detail of the triage steps themselves.
That written checklist is what actually gets followed under time pressure.
Field checklist
- Classify each failure as permanent (5.x.x) or transient (4.x.x) before deciding what to do with it.
- Group failures by recipient domain to isolate a provider-specific issue from a sending-side issue.
- Suppress permanent address failures immediately rather than retrying them.
- Hold transient deferrals for a scheduled retry instead of resending right away.
- Check whether failing addresses trace back to one list source or import batch.
- Avoid changing DNS, copy, or volume until the failure pattern is actually understood.
Primary sources
Standards and provider policies can change. These links are the reference points used for this field note.
- RFC 3463 — Enhanced Mail System Status CodesIETF / RFC Editor — 2.x.x, 4.x.x and 5.x.x delivery status code classes.
- Email sender guidelinesGoogle Gmail Help — Authentication, TLS, DNS, spam-rate and bulk-sender requirements.