Email Relay rejection code reference
Look up the SMTP replies Email Relay sends to your mail server, tell temporary rejections from permanent ones, and know when you need to act.
Email Relay answers your mail server with SMTP codes, not with JSON. Those codes appear in your own mail server's log, not in the CloudFly console.
To start from a symptom instead, see Email Relay troubleshooting.
Read the first digit first
This is the most important thing on the page, and the most commonly misread.
| Code group | Meaning | What your mail server does |
|---|---|---|
2xx | Accepted | Removes the message from its queue and considers it done |
4xx | Temporary rejection | Holds the message and retries, typically for 24–48 hours |
5xx | Permanent rejection | Drops the message and sends a failure report to the sender |
Most 4xx replies need no action from you — your mail server handles them. A 5xx always does:
the message is gone and the sender has already been notified.
Code 250 does not mean delivered
250 only says CloudFly accepted the message and took over responsibility for forwarding it.
Delivery to the recipient's mailbox happens afterwards and can still fail. The final outcome is on
the Stats & logs screen.
Rejected at sign-in
| Code | Text | Cause |
|---|---|---|
535 | Authentication failed | Wrong username or wrong key |
The username is always the literal word apikey — that exact string, not your email address. The
password is an SMTP key in the form cfr_….
A key is shown once, when it is created. If it was not saved, create a new one; there is no way to look it up.
See Create an SMTP key.
Rejected when declaring the sender
| Reply text | Group | Cause |
|---|---|---|
DOMAIN_NOT_VERIFIED | 5xx | The sender address's domain is not active, does not exist, or belongs to a different service |
DAILY_QUOTA_EXCEEDED | 4xx | The daily message allowance is used up |
INTERNAL_ERROR | 4xx | A temporary fault on our side |
relay backend unavailable | 4xx | The checking system could not be reached |
Note the contrast here, because it decides whether your message survives:
- Quota exhaustion is temporary. Your mail server holds the message and retries. When the day rolls over the allowance resets and the message goes on its own. Usually nothing for you to do.
- An unverified domain is permanent. The message bounces immediately. Once you finish verification you must send again from scratch; bounced messages do not resume.
Rejected when declaring a recipient
| Reply text | Group | Cause |
|---|---|---|
RECIPIENT_SUPPRESSED | 5xx | The address is on the suppression list |
RECIPIENT_PLATFORM_SUPPRESSED | 5xx | The address does not exist — verified and blocked for every customer |
TOO_MANY_RECIPIENTS | 4xx | More than 50 recipients on one message |
RECIPIENT_SUPPRESSED rejects only that address. The other recipients of the same message are
still accepted.
An address lands on the suppression list because an earlier message to it bounced permanently, or because the recipient reported spam. Continuing to send to dead addresses damages the sending reputation of the whole domain, so this is protection rather than obstruction. See Read and manage the suppression list.
TOO_MANY_RECIPIENTS is deliberately a temporary rejection, so your mail server holds the
message instead of bouncing it to the sender. Retrying still exceeds the limit, though — the fix is
on your side: split it into several messages of at most 50 addresses each.
Rejected because the system is loaded
| Code | Group | Cause |
|---|---|---|
451 | 4xx | The sending queue is deep and the system is pushing load back to you |
too many connections | 4xx | Too many simultaneous connections from your side |
Both are temporary and clear on their own. Your mail server retries and the message goes.
Only report it if you see it continuously for hours — at that point it is no longer a passing spike.
Rejected because the message is too large
As soon as your mail server connects, CloudFly announces the 25 MB ceiling. Standards-compliant software stops there and never uploads the message.
Oversized messages are rejected permanently, because retrying does not make a message smaller. Reduce the attachments, or host the file for download and send a link.
Quick lookup
| What you see in the log | What to do |
|---|---|
535 | Fix the username or key, then restart the sending process |
DOMAIN_NOT_VERIFIED | Verify the domain, then resend the bounced messages |
RECIPIENT_SUPPRESSED | Check the address; only Added manually rows can be removed by you — hard-bounce and complaint rows need support |
RECIPIENT_PLATFORM_SUPPRESSED | Verified as non-existent. You cannot remove it — contact support if you are sure it is live |
TOO_MANY_RECIPIENTS | Split the message, at most 50 addresses each |
DAILY_QUOTA_EXCEEDED | Nothing; if it happens often, ask for a higher quota |
451 or too many connections | Nothing |
| Message too large | Reduce the attachments |
Your account's real quota is on the Overview screen — see Read the overview page of each service. The ceiling for one message is in the size limit block on the SMTP configuration page.