clement

550 5.7.350: Remote server returned message detected as spam (Microsoft)

Exchange Online is relaying another server's rejection: the remote server refused the message as spam.

Bounce type
Hard bounce (permanent)
What to do
Depends on the text
Returned by
Microsoft (Outlook.com, Microsoft 365)

What 550 5.7.350 means

5.7.350 isn't a standard RFC code. Microsoft 365 generates it when a server outside Microsoft rejected the message, and Exchange Online reports that rejection back to you. The wording is usually 'Remote server returned message detected as spam'.

Microsoft's generic sibling is 5.0.350, a catch-all for nonspecific errors returned by the recipient's organization. In both cases the useful part is the remote server's original response, which often appears after an arrow ('->') in the NDR. Look up that inner code.

What the bounce looks like

The wording providers document for this code. Your bounce may add an IP address, a session ID or a help link after it.

Microsoft
550 5.7.350 Remote server returned message detected as spam

Why cold emailers see 550 5.7.350

  • The recipient's spam filter or security gateway (Proofpoint, Mimecast, Barracuda, Gmail) rejected the message as spam.
  • Low domain reputation or a blocklisted Microsoft 365 outbound IP.
  • The recipient forwards mail from Microsoft 365 to another provider, and that provider rejected it.
  • Missing or failing SPF, DKIM or DMARC on your domain.

How to fix 550 5.7.350

  1. Find the inner response in the NDR and look up that code; it says why the remote server refused.
  2. Check SPF, DKIM and DMARC for your sending domain, including DKIM signing enabled in Microsoft 365.
  3. Review the message for spam signals: links, attachments, image-heavy HTML, aggressive wording.
  4. If it happens only with one recipient domain, it's that organization's filter; contact the recipient another way.

Retry or suppress?

Don't suppress automatically. Decide based on the remote server's inner response: an address error means suppress; a spam or reputation block means fix your sending first.

Reading the code

The basic code 550 means "Mailbox unavailable or message refused (permanent)" under RFC 5321. In 5.7.350, the 5 is the class (permanent failure) and the 7 is the subject (security or policy). The detail number 350 isn't in the RFC 3463 / IANA registry; it's specific to the provider, so the text after the code carries the meaning.

Class 5
Permanent failure
Resending the same message won't work. Something about the message, the recipient or the sender has to change first.
Subject 7
Security or policy
A security or policy decision: spam filtering, authentication, blocklists, permissions.
Detail 5.7.350
Provider-specific

Check the rest of your setup

Paste the headers of a message that did get through into the email header analyzer to confirm SPF, DKIM and DMARC pass, and check your domain with the SPF, DKIM & DMARC checker. The deliverability checklist covers the rest of a healthy sending setup.

Got a different bounce? Paste it into the SMTP error code lookup to decode it.

FAQ

Is 550 5.7.350 a hard bounce or a soft bounce?

550 5.7.350 is a permanent failure (a hard bounce): the receiving server won't accept this message if you send it again unchanged. But the cause is not the recipient's address, so treat it differently from a 'user unknown' bounce.

Should I remove the contact after a 550 5.7.350 bounce?

Not automatically. Don't suppress automatically. Decide based on the remote server's inner response: an address error means suppress; a spam or reputation block means fix your sending first.

What does 5.7.350 mean in the error code?

In 5.7.350, the 5 is the class (permanent failure) and the 7 is the subject (security or policy). The detail number 350 isn't in the RFC 3463 / IANA registry; it's specific to the provider, so the text after the code carries the meaning.

Related SMTP codes

See all SMTP error codes

Sources

Try Clement free for 14 days

Clement reads the bounces that land in your Gmail and SMTP inboxes and tells dead addresses apart from policy blocks: it suppresses the first across every campaign and keeps the contact on the second, so you don't have to decode bounces by hand.

Start free trial