# X_MAIL_SEND_FAILED

## Means

the mail transport refused the message

## Typical cause

a rejected recipient, bad credentials, a throttle, a dead socket, or a peer that never completes a reply

## Fix

**the queue now decides this without you**: `sendFailed` carries the verdict as `error.retry`, so `sendMailJob` dead-letters a permanent refusal on the attempt that threw it instead of presenting the same rejected recipient four more times. `meta.retryable` is the same fact, unchanged, and is still what an operator reads. `true` → it will be requeued; `false` → fix what `meta.stage` names, then `x doctor --json`. `meta.stage` is the `SendStage` union in `packages/mail/src/errors.ts`: `auth` → `SMTP_URL` credentials, `tls` → `openssl s_client -connect <host>:465` for the implicit-TLS certificate, `starttls` → `openssl s_client -starttls smtp -connect <host>:587`, `recipient` → the address, `reply` → point `SMTP_URL` at the SMTP port itself, since a proxy or an HTTP port answers like this

[Mail](/error-codes#mail)
