Skip to main content

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.