August 2025 · POWERMTA TECHNICAL REFERENCE

PowerMTA 452 and 550 Bounce Code Analysis — Transient vs Permanent Failure Reference

August 2025 PowerMTA 6.x PowerMTA 452 550 Bounce Analysis

SMTP response codes are the primary diagnostic signal for understanding why messages are not being delivered. The 452 and 550 code ranges cover transient and permanent delivery failures respectively. Reading these codes correctly — and configuring PowerMTA to respond appropriately to each — determines whether messages are retried (when recovery is possible) or bounced and suppressed (when the failure is permanent). Misconfigured bounce handling, where permanent failures are retried or transient failures are bounced prematurely, is one of the most damaging configuration errors in production PowerMTA deployments.

Section 1

4xx vs 5xx: Transient vs Permanent Failures

SMTP defines two categories of failure: 4xx (transient) and 5xx (permanent). A 4xx response means "try again later" — the condition may resolve. A 5xx response means "this message cannot be delivered" — retrying is futile and worsens sender reputation by generating repeated rejected connection attempts.

Code RangeCategoryPowerMTA BehaviorCorrect Action
421-452Transient failureDefer and retry per retry-afterRetry; investigate if persistent >24h
550-559Permanent failureBounce message; no retrySuppress recipient; fix configuration if auth-related
Section 2

452 Codes: Transient Failure Reference

CodeCommon MeaningTypical DurationResponse
452 4.2.2Recipient mailbox fullHours to daysRetry for 3-5 days; then treat as inactive
452 4.5.3Too many messages per SMTP sessionImmediate config issueReduce max-msg-per-conn in domain block
452 4.4.5Insufficient system storage (remote)HoursStandard retry — not your issue to fix
452 4.1.1Recipient address temporarily rejectedHoursStandard retry; investigate if pattern persists
# 452 4.5.3 — too many messages per session
# Fix: reduce messages per SMTP connection

    max-msg-per-conn    50      # Default is often 100; Gmail prefers lower
    retry-after         15m


# 452 4.2.2 — mailbox full retry handling
# Default PowerMTA behavior: retries these (correct)
# After 5 days of 4.2.2 responses, mark address as inactive in your system
# These are typically abandoned mailboxes, not temporarily full accounts
Section 3

550 Codes: Permanent Rejection Reference

CodeMeaningCategoryPowerMTA Response
550 5.1.1Invalid recipient addressbad-mailboxBounce; suppress immediately
550 5.1.2Recipient domain not found / no MXbad-domainBounce; suppress domain
550 5.7.1Spam content or sender reputation rejectionspamBounce; investigate content/reputation
550 5.7.26DMARC authentication failurepolicyFix DKIM/SPF alignment; do not retry until resolved
550 5.7.606Microsoft banned IPadministrativeSubmit delisting request
550 5.2.2Recipient mailbox over quota (permanent status)quotaBounce; typically abandoned account
# PowerMTA bounce-handling for 550 codes (should be configured in default-bounce-handling)
default-bounce-handling bad-mailbox=block       # 5.1.1 — suppress immediately
default-bounce-handling bad-domain=block        # 5.1.2 — suppress domain
default-bounce-handling spam=block              # 5.7.1 — suppress; investigate
default-bounce-handling policy=block            # 5.7.x — suppress until auth fixed
default-bounce-handling administrative=block    # Blocked IPs/domains

# NEVER configure retry for 5xx responses
# Retrying permanent failures burns IP reputation and wastes queue resources
Section 4

ISP-Specific 5xx Bounce Patterns

# Gmail permanent rejections
"550 5.7.1"  → Content rejection or sender reputation
"550 5.7.26" → DMARC failure (most common Gmail 550)
"550 5.2.1"  → User has disabled their account

# Microsoft permanent rejections
"550 5.7.1"  → IP blocked
"550 5.7.606" → IP on banned list
"550 5.7.510" → Access denied
"550 5.7.1 DMARC" → DMARC policy violation

# Yahoo permanent rejections
"550 5.7.1 [BL23]" → IP on Yahoo blocklist
"550 5.7.0 From address..."  → From address policy violation
"554 delivery error"  → Generic permanent rejection

# Common across all ISPs
"550 5.1.1 user unknown"   → Invalid address
"550 5.1.2 bad destination" → Domain issue
Section 5

Accounting Log Analysis for Bounce Codes

# Hard bounce rate by ISP (5xx codes)
awk -F, 'NR>1 && $1=="b" {
    split($6, a, "@")
    domain = a[2]
    if ($9 ~ /^5/) hard[domain]++
    if ($9 ~ /^4/) soft[domain]++
} END {
    for(d in hard) print hard[d], "hard;", soft[d]+0, "soft;", d
}' /var/log/pmta/accounting-YYYYMMDD.csv | sort -rn | head -15

# Top permanent rejection codes
awk -F, 'NR>1 && $1=="b" {codes[substr($10,1,15)]++} END {
    for(c in codes) print codes[c], c
}' /var/log/pmta/accounting-YYYYMMDD.csv | sort -rn | head -15
FAQ

Frequently Asked Questions

What is the difference between a 452 and 550 bounce code? +
How does PowerMTA classify 550 5.1.1 bounces? +
Should I retry 452 4.2.2 mailbox full responses? +
What does a 550 5.7.1 spam rejection mean vs 550 5.7.26? +
How do I prevent PowerMTA from retrying 550 permanent failures? +

Operating PowerMTA at production volume?

We manage PowerMTA environments for high-volume senders — configuration, IP warming schedule, daily reputation monitoring, and operational response. Fully managed. No self-service.

Need a Managed PowerMTA Environment?

Cloud Server for Email operates fully managed PowerMTA infrastructure from EU-based dedicated servers. Daily monitoring, per-ISP domain block optimization, IP warming management, and incident response included.

Need PowerMTA support?

Our team works with PowerMTA daily. Contact us for a technical consultation on your specific configuration.