Reading a rejection
Rejections take the shape550 5.7.1 [CODE] reason. The bracketed code tells you which control fired.
These codes are designed to help you understand why a message was rejected. They are not part of the SMTP standard and can
change at any time as we update our policies. Below are some examples of common rejection codes and their meanings.
Authenticate every sending domain
- Configure Domain Lockdown for every domain you send from.
- Publish SPF, DKIM, and DMARC records before you scale.
- Keep
from.email,reply_to, and the DKIM signing domain aligned. - Never send on behalf of domains you do not control.
Segment your traffic
- Use a separate sub-account for each client, tenant, or application.
- Use consistent headers within each mail stream. MailChannels derives a
sender-idfrom message headers, so consistency allows each stream to build its own reputation history. - Set
campaign_idper send for campaign-level metrics, webhook correlation, and isolation. - Use distinct domains or subdomains for transactional and marketing mail.
Send only to recipients who asked for mail
- Send only to recipients with explicit consent. Do not buy, scrape, or rent lists.
- Do not send speculatively to generated or role addresses (
info@,sales@, sequential local parts). - Validate addresses at signup. Drop typos and disposable domains.
Keep message content honest
- Use a stable
from.emailper mail stream. Do not rotate sender addresses to evade filters. - Use HTTPS links to domains you control. Avoid URL shorteners and redirector chains.
- Avoid executables, scripts, and password-protected archives as attachments.
- Match the HTML and plain-text bodies. Do not hide content in one.
Ramp new traffic gradually
- Warm new domains over days or weeks. Start low, grow as engagement stays healthy.
- Treat a new sub-account,
campaign_id, or recipient segment the same way. - Keep daily volume consistent. Unexplained spikes attract scrutiny.

