550 Mailbox Not Found — Email Bouncing
Symptoms
- Bounce-back email with "550 5.1.1 The email account does not exist"
- SMTP server log: `RCPT TO:<[email protected]> 550 No such user here`
- Mail delivery report (NDR) shows permanent failure code 5.1.1
- Email list analytics shows high hard-bounce rate for a specific domain
- Postfix log: `reject: RCPT from ...: 550 5.1.1 <[email protected]>: Recipient address rejected: User unknown in local recipient table`
- SMTP server log: `RCPT TO:<[email protected]> 550 No such user here`
- Mail delivery report (NDR) shows permanent failure code 5.1.1
- Email list analytics shows high hard-bounce rate for a specific domain
- Postfix log: `reject: RCPT from ...: 550 5.1.1 <[email protected]>: Recipient address rejected: User unknown in local recipient table`
Root Causes
- Typo in recipient email address (e.g., 'gmai.com' instead of 'gmail.com')
- Recipient mailbox was deleted or disabled but still exists in your contact list
- Domain MX records point to the wrong mail server or are missing entirely
- Mail server does not have the recipient in its local user database
- Email alias or forwarding rule was removed without updating senders
Diagnosis
**Step 1 — Verify the address is correct**
Check for typos in the To/CC/BCC field. Confirm the address with the recipient via another channel.
**Step 2 — Check MX records for the recipient's domain**
```bash
dig MX example.com +short
# Expected: one or more priority + hostname lines
# e.g., 10 mail.example.com.
# No output or NXDOMAIN means the domain has no mail server
```
**Step 3 — Attempt an SMTP conversation manually**
```bash
# Connect to the receiving MX
telnet mail.example.com 25
EHLO yourdomain.com
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
# A 550 response confirms the server rejects the address
```
**Step 4 — Inspect your mail server logs**
```bash
# Postfix
grep '[email protected]' /var/log/mail.log | tail -20
# Exchange / Microsoft 365: check Message Trace in the admin portal
```
**Step 5 — Check bounce classification in your ESP**
Distinguish hard bounces (permanent 5xx — stop sending) from soft bounces (temporary 4xx — retry acceptable).
Check for typos in the To/CC/BCC field. Confirm the address with the recipient via another channel.
**Step 2 — Check MX records for the recipient's domain**
```bash
dig MX example.com +short
# Expected: one or more priority + hostname lines
# e.g., 10 mail.example.com.
# No output or NXDOMAIN means the domain has no mail server
```
**Step 3 — Attempt an SMTP conversation manually**
```bash
# Connect to the receiving MX
telnet mail.example.com 25
EHLO yourdomain.com
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>
# A 550 response confirms the server rejects the address
```
**Step 4 — Inspect your mail server logs**
```bash
# Postfix
grep '[email protected]' /var/log/mail.log | tail -20
# Exchange / Microsoft 365: check Message Trace in the admin portal
```
**Step 5 — Check bounce classification in your ESP**
Distinguish hard bounces (permanent 5xx — stop sending) from soft bounces (temporary 4xx — retry acceptable).
Resolution
**Fix 1 — Correct the recipient address**
Update the email address in your contact list or application database and resend.
**Fix 2 — Remove permanently bounced addresses**
Mark the address as a hard bounce and suppress future sends to avoid ISP blacklisting:
```python
# Django example: mark bounce in DB
Contact.objects.filter(email='[email protected]').update(
bounce_type='hard',
is_unsubscribed=True,
)
```
**Fix 3 — Fix MX records (if you control the recipient domain)**
```
# Cloudflare DNS panel or similar:
Type: MX Name: example.com Mail server: mail.example.com Priority: 10
```
**Fix 4 — Re-create the mailbox or alias on the mail server**
```bash
# Postfix + Dovecot — add user
sudo useradd -m -s /sbin/nologin newuser
sudo passwd newuser
# Or add to /etc/postfix/virtual and run:
sudo postmap /etc/postfix/virtual && sudo systemctl reload postfix
```
Update the email address in your contact list or application database and resend.
**Fix 2 — Remove permanently bounced addresses**
Mark the address as a hard bounce and suppress future sends to avoid ISP blacklisting:
```python
# Django example: mark bounce in DB
Contact.objects.filter(email='[email protected]').update(
bounce_type='hard',
is_unsubscribed=True,
)
```
**Fix 3 — Fix MX records (if you control the recipient domain)**
```
# Cloudflare DNS panel or similar:
Type: MX Name: example.com Mail server: mail.example.com Priority: 10
```
**Fix 4 — Re-create the mailbox or alias on the mail server**
```bash
# Postfix + Dovecot — add user
sudo useradd -m -s /sbin/nologin newuser
sudo passwd newuser
# Or add to /etc/postfix/virtual and run:
sudo postmap /etc/postfix/virtual && sudo systemctl reload postfix
```
Prevention
- Validate email addresses at point of entry with RFC 5322-compliant regex or a verification API (ZeroBounce, NeverBounce) before adding to your list
- Implement double opt-in to ensure addresses are deliverable from the start
- Monitor bounce rates and automatically suppress hard bounces after the first failure
- Set up bounce webhooks with your ESP (SendGrid, SES, Mailgun) to receive real-time bounce events and update your database automatically
- Audit your contact list periodically — remove addresses not engaged in 12+ months
- Implement double opt-in to ensure addresses are deliverable from the start
- Monitor bounce rates and automatically suppress hard bounces after the first failure
- Set up bounce webhooks with your ESP (SendGrid, SES, Mailgun) to receive real-time bounce events and update your database automatically
- Audit your contact list periodically — remove addresses not engaged in 12+ months