Errors print error: <message> on stderr and exit 1.
SymptomLikely causeWhat to run
no accounts authorizedNothing stored yetsetup.md
no OAuth client storedGmail used before set-clientmailkit auth set-client <client.json>
no token for …Account missing or half-registeredmailkit auth add … for that provider
Outlook consent says “Need admin approval”Tenant restricts third-party appsAsk IT to allow mailkit, then re-run mailkit auth add --provider outlook
Outlook token expired for …90 days of inactivity, or consent revokedmailkit auth add --provider outlook you@outlook.com again
mailkit has no Outlook app id in this buildBuild shipped without the Entra app idmailkit auth set-outlook-app <client_id>, or install a release that has one
Outlook 403 “scope not granted”Consent granted less than mailkit needsmailkit auth add --provider outlook you@outlook.com again
Outlook 429 / slow bulk organizeMicrosoft Graph throttlingmailkit honours Retry-After up to 3 tries. Wait, then retry a smaller batch.
invalid_grant / doctor FAIL on GmailRefresh token revoked or expiredmailkit auth add you@gmail.com again. Publish the OAuth consent screen to Production.
Fastmail doctor FAILToken revoked or mistypedMint a new Mail token; auth add --provider fastmail
Bridge is not reachable / Proton doctor FAILBridge not running, or wrong portOpen Proton Mail Bridge, sign in, retry
Bridge password rejectedNot the mailbox passwordCopy the Bridge mailbox password, not the Proton login
Bridge certificate changedBridge cert rotatedmailkit auth add --provider protonmail you@proton.me again
'send' is not supported on fastmailWrong accountUse a Gmail, Outlook, or Proton Mail -a
'thread' is not supported on protonmailVerb is Gmail-onlyUse read / show
'label' is not supported on outlookGraph has folders, not Gmail labelsUse archive / trash, or a Gmail account
Outlook attachment refused before sendOver the 3 MB inline capSend a link, or split the file. Nothing was sent.
UnsupportedQuerySearch syntax this provider does not compileSee read.md
refusing to send without --yesMissing flagGet a human yes, then add --yes
--attach can't be combined with --draftFlag mixAttach when drafting, or send a new message
403 accessNotConfiguredGmail API not enabledEnable Gmail API on the Google Cloud project
Google “app not verified”You are on a BYO client override, not mailkit’s verified oneCheck with mailkit auth client; auth unset-client returns to the shipped client
Keychain / “no accounts” in a sandboxAgent sandbox blocked KeychainRun mailkit unsandboxed

Doctor first

mailkit auth list
mailkit auth doctor --json
The provider field tells you which mailbox you are actually talking to.

Message ids are per provider

If show rejects an id, you passed one provider’s id to another account. Use ids from read --json on that account.
ProviderId looks like
gmaillong hex
outlooklong opaque Graph id (immutable — survives a folder move)
fastmaila JMAP email id
protonmailINBOX:12