Status code 550 5.7.350 means another mail server judged your message to be spam and refused it, and Microsoft 365 passed that refusal back to you. The reason is in the reply after the arrow, so fix what that reply names before you send again.
How to read the result
The line reads close to "550 5.7.350 Remote server returned message detected as spam", then an arrow, then a second code. Everything before the arrow is Microsoft's wrapper. After it comes the remote server's own reply, and the decoder reads both.
In one Microsoft Q&A thread, the reply after the arrow was a Gmail 5.7.1 about a very low domain reputation. Microsoft's half said only "spam", and Gmail's half said why.
No Microsoft Learn article documents 5.7.350. Its meaning rests on a Microsoft Q&A thread where a Microsoft Community Moderator answers that the recipient's server detected the message as spam. Treat it as a careful reading, not an official definition, and do not confuse it with 5.0.350, Microsoft's catch-all for nonspecific errors from the recipient's organization.
How to fix it
Work from the far side of the arrow back to your own setup:
The reply after the arrow. Decode it on its own; it names the real reason.
SPF, DKIM, and DMARC. Check them for the service you send from, aligned with your From domain.
The links. Check every link in the message and the domain it points to.
Your sending reputation. When the reply names it, send less, to people who expect your mail, and give it time.
No record you publish today changes how a receiver judged yesterday's mail. In Oneprofile, a sequence can send as plain text with no links or formatting, and each mailbox has a daily send limit you raise a little at a time. For the wider picture, read a cold email deliverability playbook, list to mailbox.
