What’s the difference between hard and soft failure codes?
SMTP response codes indicate whether failures are permanent or temporary, guiding proper handling.
Hard failures (5xx codes):
Permanent rejection; don't retry this message to this recipient
The server is definitively refusing delivery
Common types:
550: User unknown, mailbox unavailable
551: User not local
552: Message too large
553: Mailbox name invalid
554: Transaction failed (policy rejection)
Action: Suppress the address, investigate the cause, don't resend
Soft failures (4xx codes):
Temporary issue; retry is appropriate
The server might accept the message later
Common types:
421: Service unavailable
450: Mailbox temporarily unavailable
451: Local error, try again
452: Insufficient storage
Action: Queue for retry with backoff, monitor for persistence
Why the distinction matters:
Retrying hard failures wastes resources and can look like spam
Not retrying soft failures loses legitimate mail
Proper classification drives appropriate suppression logic
ESPs should handle this automatically, but understanding the logic helps troubleshoot unexpected behavior.
Edge cases: Some servers misuse codes (returning 5xx for temporary issues). The error text often clarifies actual meaning.
Was this answer helpful?
Thanks for your feedback!