Checking the environment
--offline skips anything that needs a network.
Warnings do not fail it. Someone who never uses SMTP can live with an unconfigured SMTP credential, so doctor exits 0 with warnings and 5 only when a check actually failed. --strict promotes warnings to failures, for a caller who wants a clean environment or nothing:
doctor is also the one command that writes its full report to stdout even when it exits non-zero. Everywhere else, a failure leaves stdout empty. The report is the part that names which check broke. See Exit codes.
Testing SMTP
--auth also attempts a sign-in and immediately disconnects, which puts a credential on the wire but never a message:
--host, --port, --tls and --user override the stored values for one run, which is how you check a credential before you store it. The defaults are port 587 with starttls.
Finding the right dashboard page
Understanding a specific failure
mailkube errors explain 550 works. --list dumps everything it knows. See Errors and exit codes.
Common situations
A send is rejected withfrom_domain_not_allowed. The --from address is on a domain that is not verified, or not verified for this API key. Check it in Domains.
--transport smtp fails with no credential. There is no fallback to REST by design. Store one with mailkube auth login --smtp, or use the API transport.
Output is JSON when you wanted the readable version. Something is capturing stdout, which flips the format. Force it with -o text.
A listing stops part-way with exit 7. --all walked into the rate limit. Filter the listing first, then walk it. See Paging.
A repeated send did nothing. An idempotency key was reused inside its 24-hour window, so the server replayed the original response. The result carries "replayed": true.
Verbose output would help. -v logs more, and -vv logs the SDK’s own requests and responses.
Getting help
Quote the output ofmailkube version and, when a request reached the API, the request id from the error report. That id is what makes a specific call findable.