OpenMailClient

Early · milestone M5 (calendar, people, tasks) in progress: the Calendar's views, appointments and recurring appointments are in, calendars keep in step with CalDAV servers, and accounts and their mail come over from Outlook

The desktop mail client you know, rebuilt in Rust and open.

OpenMailClient is a clean-room, open-source mail client aiming at parity with Outlook Classic, the Win32 desktop Outlook: the same layout and behaviour, .pst files that go both ways, and every feature reachable as a command from the window, a CLI and, later, an MCP server for agents.

The OpenMailClient window with its sample mailbox: folder pane, message list and a formatted message in the reading pane
The sample mailbox: invented content, drawn headlessly by the project's own screenshot tool.

What works today

Outlook data files

Opens .pst and .ost (ANSI, Unicode and 4K pages) and single .msg, .oft and .eml messages. Files written here open in Outlook Classic with every folder and message as written.

Saves that cannot lose mail

Nothing is written until you save. Unsaved changes are journalled beside the file and come back after a crash; a save writes with an undo file beside it, so a power cut leaves the file as it was.

Formatted reading

HTML and RTF bodies laid out and drawn in-process: tables, borders, lists, right-to-left text, pictures of many kinds (animated ones too) and Windows metafiles.

Accounts

Servers found from your address (the address itself is sent to no one); IMAP, POP3 and SMTP over TLS with checked certificates (a server's own trusted on the owner's word, for that server only), passwords in the system's credential store, each account in a data file of its own, Send/Receive on F9 and on a timer with its progress in a window of its own, messages held until a time and expiring, only what changed asked of an IMAP server that keeps mod-sequences (CONDSTORE, QRESYNC), folders renamed, moved and deleted followed both ways, drafts kept on the server as they are written and drafts from elsewhere opened to be finished here, and new mail received the moment the server says it came (IDLE) and told of at the corner of the screen with a chime of our own.

Printing

Memo Style and Table Style print on any printer the system has, with copies and a page range, or to PDF; the print window shows the pages beside the page setup, and the message body can be printed alone, without its details, header and footer.

Everything is a command

The ribbon, shortcuts, command search and the CLI all run the same commands by id, so whatever the window can do can be scripted, and soon driven by an agent.

Screenshots

Every picture is of the sample mailbox, with invented content, drawn headlessly by the project's own screenshot tool.

Progress

The numbers are measured, not estimated. The roadmap keeps the log, and work put off is kept as a scheduled "do later" row, never dropped.

  1. M2 Formatted reading: HTML and RTF bodies, pictures, printing
  2. M3 Writing .pst: a mailbox saved, changes kept, settings kept
  3. M3b The do-later batch: journalled changes, saving into a file where it is
  4. M3c Proof in Outlook: files we write open in Outlook Classic; 4K-page files
  5. M4 Accounts: sending and receiving, IMAP kept in step both ways, new mail told of as it comes, servers found from the address and its DNS records
  6. M1 Checks against Outlook, side by side: an account's mail now listed and dated as Outlook does it; dialogs in the theme's colours, and themes of your own for light and dark
  7. M5 Calendar, People and Tasks: day, work week, week and month views and appointments (done); import from Outlook, accounts and their data files, shown first and Outlook's files left as they were (done); recurring appointments, one occurrence changed or deleted alone (done); .ics calendar files opened and saved (done); calendars kept in step with a CalDAV server such as Nextcloud, both ways (done); time zones next
  8. M6 MCP server, control channel and a web build through WASM
  9. M7 Sign-in to Gmail, Microsoft 365, Yahoo and others through OAuth 2.0 (after the first release)

Mail is hostile. The client treats it so.

  • Nothing in a message is run. No scripts, ever.
  • Remote content is never fetched by itself. Pictures download only when you ask, over HTTPS, and never from your own network.
  • Attachments open only on your answer. A program or a script is only ever saved; an opened file is a read-only copy marked as from the internet.
  • Never crash, never lose mail. No panics and no unsafe in the code; every file reader is tested with hostile input.
  • Clean room. Formats come from public specifications. No Microsoft code, icons, fonts or wording: icons are drawn in code.
OpenMailClient asking about an attachment whose name reads as a PDF but is a web page: it can be saved, not opened
A file that passes for a PDF is told of, and is only saved.

Get started

There are no packaged releases yet. With a Rust toolchain (1.90 or newer):

git clone https://github.com/AdriaanBoshoff/OpenMailClient
cd OpenMailClient
cargo run --release -p openmailclient -- --sample

Open your own archive, or work without a window:

cargo run --release -p openmailclient -- path/to/archive.pst
cargo run --release -p openmailclient-cli -- inspect path/to/archive.pst --check
cargo run --release -p openmailclient-cli -- convert message.msg message.eml

Opening a data file never changes it; nothing is written until you save.