ps and shell history would see them. mailkit prompts on stdin with echo off.
Gmail (full access)
mailkit ships its own Google Desktop OAuth client. You do not open Google Cloud.| Scope | Allows | Does not allow |
|---|---|---|
gmail.modify | Read, labels, archive, trash | Permanent delete |
gmail.compose | Drafts and send | — |
gmail.settings.basic | Filters | Other account settings |
auth add saved a token but could not verify yet, wait 1–2 minutes and run mailkit read.
Outlook (read + write)
Covers personaloutlook.com / hotmail.com / live.com and Microsoft 365 work accounts. mailkit ships its own Microsoft Entra app id. You do not open the Azure portal.
- Run the consent:
- A browser opens. Pick the account. Click Accept.
- Check it:
| Scope | Allows | Does not allow |
|---|---|---|
Mail.ReadWrite | Read, drafts, read-state, move to Deleted Items or Archive | Permanent delete |
Mail.Send | Send | — |
User.Read | Confirm which mailbox you authorized | — |
offline_access | Stay signed in between runs | — |
reconcile, file-inbox, untrash, and thread are not available on Outlook. They exit 1 with a clear error.
Advanced: mailkit auth set-outlook-app <client_id> points mailkit at your own Entra app registration. Use it only when a build ships without an app id, or when your tenant requires its own app.
Fastmail (read-only)
- Fastmail: Settings → Privacy & Security → Manage API tokens → New API token.
- Scope Mail. Mark it read-only.
- Register:
thread are not available on Fastmail. They exit 1 with a clear error.
Proton Mail (read + send, via Bridge)
Proton Mail has no public mail API. mailkit uses Proton Mail Bridge on this Mac. Needs: a paid Proton plan, Bridge installed, signed in, running.- Install Bridge from proton.me/mail/bridge.
- Copy the mailbox password from Bridge. This is not your Proton login.
- Register:
127.0.0.1:1143, SMTP 127.0.0.1:1025. If Bridge is stopped, read and send fail. auth doctor will say Bridge is not reachable.
Check
--force overwrites an address that already has a different provider’s credential. That destroys the old credential. Only use it when you mean to.
Next: Accounts.