No description
Find a file
2026-07-23 10:30:28 +02:00
src fix(config): set default auto_refresh_minutes to 5 2026-07-23 10:30:28 +02:00
.gitignore feat: initial commit of meil, a terminal mail viewer for Microsoft 365 2026-07-13 10:40:01 +02:00
AGENTS.md docs: update project guidelines to include reference for shared conventions 2026-07-21 13:26:50 +02:00
Cargo.lock feat: add configuration and state management for auto-refresh feature 2026-07-16 16:10:47 +02:00
Cargo.toml feat: add configuration and state management for auto-refresh feature 2026-07-16 16:10:47 +02:00
README.md feat: initial commit of meil, a terminal mail viewer for Microsoft 365 2026-07-13 10:40:01 +02:00

meil

A read-only terminal mail viewer for Microsoft 365.

Authenticates via the local microsoft-identity-broker D-Bus service and reads mail through the Microsoft Graph REST API.

Features

  • Browse mail folders (Inbox, Sent, Drafts, Archive, etc.)
  • Message list with unread/attachment indicators and relative timestamps
  • Full message reader with word-wrapped plain text (HTML fallback)
  • Marks messages as read when opened
  • Lazy pagination — loads more messages on scroll
  • Unread-only filter

Requirements

  • Linux with microsoft-identity-broker running on the D-Bus session bus
  • An M365 account signed into the broker
  • Rust 2024 edition toolchain

Usage

cargo run

Override the OAuth client ID:

cargo run -- --client-id <YOUR_CLIENT_ID>
# or
MEIL_CLIENT_ID=<ID> cargo run

The default client ID is the Microsoft Office public client (d3590ed6-...), which is pre-consented for Mail.ReadWrite in all M365 tenants.

Keybindings

Key Action
j / Move down
k / Move up
Enter Open folder / Open message
Tab Switch focus (folders ↔ messages)
q / Esc Back / Quit
r Refresh
u Toggle unread-only filter
g Jump to top
G Jump to bottom
Space / PgDn Page down (reader)
PgUp Page up (reader)

Scope

This is a viewer only — no send, reply, delete, or move. The Mail.ReadWrite scope is used solely for marking messages as read.