porteden email
Use porteden email (alias: porteden mail) for email management across multiple accounts. Use -jc flags for AI-optimized output.
If porteden is not installed: brew install porteden/tap/porteden (or go install github.com/porteden/cli/cmd/porteden@latest).
Setup (once)
- Browser login (recommended):
porteden auth login— opens browser, credentials stored in system keyring - Direct token:
porteden auth login --token <key>— stored in system keyring - Verify:
porteden auth status - If
PE_API_KEYis set in the environment, the CLI uses it automatically (no login needed).
Common commands
- List emails (or --today, --yesterday, --week, --days N):
porteden email messages -jc - Filter emails:
porteden email messages --from sender@example.com -jc(also: --to, --subject, --label, --unread, --has-attachment) - Search emails:
porteden email messages -q "keyword" --today -jc - Custom date range:
porteden email messages --after 2026-02-01 --before 2026-02-07 -jc - All emails (auto-pagination):
porteden email messages --week --all -jc - Get single email:
porteden email message <emailId> -jc - Get thread:
porteden email thread <threadId> -jc - Send email:
porteden email send --to user@example.com --subject "Hi" --body "Hello"(also: --cc, --bcc, --body-file, --body-type text, --importance high) - Send with named recipient:
porteden email send --to "John Doe <john@example.com>" --subject "Hi" --body "Hello" - Reply:
porteden email reply <emailId> --body "Thanks"(add--reply-allfor reply all) - Forward:
porteden email forward <emailId> --to colleague@example.com(optional--body "FYI", --cc) - Modify email:
porteden email modify <emailId> --mark-read(also: --mark-unread, --add-labels IMPORTANT, --remove-labels INBOX) - Delete email:
porteden email delete <emailId>
Notes
- Credentials persist in the system keyring after login. No repeated auth needed.
- Set
PE_PROFILE=workto avoid repeating--profile. -jcis shorthand for--json --compact: strips attachment details, truncates body previews, limits labels, reduces tokens.- Use
--allto auto-fetch all pages; checkhasMoreandnextPageTokenin JSON output. - Email IDs are provider-prefixed (e.g.,
google:abc123,m365:xyz789). Pass them as-is. --include-bodyonmessagesfetches full body (default: preview only). Singlemessageincludes body by default.--bodyand--body-fileare mutually exclusive. Use--body-type textfor plain text (default: html).- Confirm before sending, replying, forwarding, or deleting emails.
- Environment variables:
PE_API_KEY,PE_PROFILE,PE_TIMEZONE,PE_FORMAT,PE_COLOR,PE_VERBOSE.