How to use it#
Paste the error message exactly as it came: the bounce in your inbox ("Mail Delivery Subsystem", "Undeliverable"), your server log or your sending service's answer. The tool finds the SMTP code, tells you whether it is the address, a temporary problem or a provider rule, and the next step.
The three kinds of refusal#
| Kind | Examples | What it means | What to do |
|---|---|---|---|
| Hard | 550 5.1.1, 550 5.1.10 | the address does not exist | remove it and never send again |
| Soft | 421, 451, 452 4.2.2 | busy server, full mailbox, rate limit | the send retries on its own; if it lasts for days, stop |
| Policy | 550 5.7.1, 5.7.26, 5.7.515 | the provider blocked it for authentication, reputation or content | the address exists: fix SPF, DKIM, DMARC or the content |
A message that "expired" (554 4.4.7 Message expired) carries the real reason inside, for example 452 4.2.2 inbox out of storage space (mailbox full). The tool reads the most specific code.
The codes you will see most#
- 550 5.1.1: the mailbox does not exist. Usually a typo. Check it with the email verifier.
- 550 5.7.515 (Microsoft): the domain does not meet the authentication rules for bulk senders. It needs aligned SPF, DKIM and DMARC. See emails not reaching Outlook and Hotmail.
- 550 5.7.26 (Gmail): the message failed DMARC. Check the domain with the SPF, DKIM and DMARC checker.
- 421 4.7.0 / 4.7.28: the provider is rate limiting you. Slow down and send first to the people who engage most.
- 452 4.2.2: mailbox full. Temporary.
The full list, case by case, is in the SMTP error codes guide.
On the API and MCP#
curl -X POST https://api.couryo.com/v1/tools/explain-smtp \
-H "Content-Type: application/json" \
-H "Accept-Language: en" \
-d '{ "message": "550 5.1.1 <ana@example.com>: Recipient address rejected: User unknown" }'Without a key you get 50 explanations a day per IP; with any Couryo key, 2,000 a day. On the public MCP server, no login (https://mcp.couryo.com/tools), the tool is explain_smtp_error: your AI agent can explain a bounce in the middle of a conversation.
At Couryo you do not even need to paste anything: every email has a timeline with the destination server's original answer and the plain-words explanation, and addresses that do not exist go to the suppression list on their own.
FAQ#
What does 550 mean?#
A permanent refusal: the destination server will not accept that message as it is. The enhanced code (such as 5.1.1 or 5.7.1) tells you why: address does not exist, authentication, reputation or content.
Should I send again after a refusal?#
Only if it is temporary (codes starting with 4). Retrying an address that does not exist hurts the sender's reputation, and then even email to good addresses starts landing in spam.
Is it my fault or the recipient's?#
A missing address and a full mailbox are on the recipient's side. A policy refusal (5.7.x) is almost always on the sender's side: missing authentication, reputation or suspicious content.
Do you store what I paste?#
No. The text is read, explained and discarded.