## TL;DR
550 5.1.0 address rejected means the receiving server refused that specific recipient address. Verify the address is real and correctly spelled; if it is valid, check whether the recipient server blocklists your sending IP or domain, then fix reputation or route around it.

```text
mailgun 550 5.1.0 address rejected
```

## Use this when
- Mailgun logs show 550 5.1.0 for a recipient that used to receive mail
- One domain's addresses bounce while others deliver
- You need to classify a bounce as address vs reputation vs policy

## Not for this skill when
- The code is 5.7.1 (policy/relay block; different fix)
- Mailgun API returns 4xx on send (key, domain, or payload problem)
- The recipient never opted in (list hygiene problem, not a bounce to debug)

## Steps
1. Read the full bounce in Mailgun logs: confirm the code is 5.1.0 and note the recipient server's extra text. Expected: the server's reason phrase names the cause (unknown user, rejected address).
2. Validate the address format and check it against your signup source for typos (gmial, con vs com). Expected: you rule out malformed or mistyped addresses.
3. If the address is valid, check your domain and sending IPs against public blocklists (Spamhaus, Barracuda). Expected: a listing explains domain-wide rejections.
4. For a listing, follow the blocklist's delisting process after fixing the underlying cause (usually a spam trap or complaint spike). Expected: delisted, then rejections stop.
5. For a single unknown-user rejection, suppress the address and stop retrying it; repeated retries to dead addresses hurt reputation. Expected: no further bounces for that address.

## Variant phrasings
### mailgun 550 address rejected
Read the server's full reason text; 5.1.0 is the recipient side refusing the address.
### mailgun recipient rejected 5.1.0
Check blocklists when valid addresses on one domain all reject at once.

## Tool/version compatibility
Mailgun sending API and dashboard Logs as of 2026. Bounce codes come from the recipient's server and are surfaced verbatim in Mailgun logs.

## Why it happens
5.1.0 is the recipient mail server's way of saying it will not accept mail for that address right now. The common reasons: the mailbox does not exist, the address is disabled, or the server rejects the sender's IP/domain at the RCPT stage (blocklist or policy). Mailgun reports the code but the decision was made by the receiving server, so the fix is on the address or your reputation, not in Mailgun settings.

## Edge cases / pitfalls
- A typo'd domain that still resolves (e.g. a parked domain with a catch-all MX) can 5.1.0 instead of bouncing as unknown domain; verify addresses at signup.
- Corporate servers sometimes 5.1.0 all unknown recipients during directory-harvest protection; back off and verify via another channel.
- Do not keep retrying 5.1.0 addresses on a schedule; treat them as permanent failures after the first confirmation.
- Read the key via os.environ.get("MAILGUN_API_KEY") and never log it.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_-p-z6mQ2zKfr1ykzwR0GnA
