个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Open-source, clean-room, local-first alternative to Microsoft Outlook in pure Rust: email, calendar, contacts and tasks over IMAP, JMAP and Exchange. Linux, Windows, macOS. A fork of ZIDAN44/mailcraft.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗quatrelle-cli run mail.reply) and startup scripting (--cmd).unwrap/expect/panic outside tests, hostile-input caps in the IMAP
parser, a test that runs every command with junk parameters, and Session::run catches any panic.A quatrelle is a Renault 4L — the yellow van the postman drove from one mailbox to the next, never in a hurry and never leaving a letter behind. Ours is a little rusty in places, and that is the point: Rust is the language underneath, and the rust is what keeps it from falling apart.
| Area | Highlights |
|---|---|
| Accounts | Any IMAP + SMTP or POP + SMTP provider (POP mail is kept in folders on this computer, starting from an existing .pst if wanted), JMAP (RFC 8620/8621), Exchange Online through Microsoft Graph, or an organisation's own Exchange server through EWS (NTLM or Basic sign-in, found with Autodiscover, calendars and contacts included); several accounts with an All Inboxes favorite; server settings found from the address (the domain's autoconfig, the Mozilla ISPDB, MX and SRV records); sign-in through the browser (OAuth 2.0) for Microsoft 365 with your organisation's own app registration, and for Gmail and Outlook.com in builds that carry one (docs/oauth.md), an app password otherwise; SSL/TLS or STARTTLS; passwords in the system keychain; Outlook data files (.pst) open as mailboxes of their own, with their contacts and calendar, and any account exports to one |
| Sync | Folder list with special-use roles (RFC 6154); per-folder incremental sync (new mail, flag changes via CONDSTORE, deletions via QRESYNC); UIDVALIDITY resets; IDLE on the Inbox for instant new mail; newest messages prefetched for offline reading; changes made offline replayed; back-off reconnects; desktop notifications for new mail |
| Reading | Date-grouped list (Today, Yesterday, weekdays, Last week…), unread bars and bold, flags, attachment and replied markers, previews; reading pane right, bottom or off; double-click opens a message in its own window; conversations (JWZ threading); HTML shown formatted (headings, lists, links, quotes, colours, tables) with web pictures on request, remembered per sender; picture, PDF and video thumbnails; attachments dragged out to other apps; Print, Save as PDF, Save as .eml; arranged by date, sender, recipient, subject, size, flag or attachments, either way round; filters for unread, flagged, files, categorized, important and to or Cc me; a minimizable folder pane |
| Organising | Delete (to Deleted Items; permanent there, with confirmation), Archive, Report junk / Not junk, Move to (dialog or drag), Read / Unread, Flag, Pin, Snooze, colour categories, Mark all as read; Focused / Other; inbox rules; filters: Unread, Flagged, Has files; multi-select with Ctrl and Shift; folders created, renamed, moved and deleted; favourites; Undo (Ctrl+Z); Ignore a conversation (its later replies go to Deleted Items) |
| Writing | New, Reply, Reply all, Forward (with attachments); formatting (bold, italic, lists, headings, quotes, links) sent with a plain-text alternative; pictures inserted or pasted inline; To / Cc / Bcc suggested from mail you've seen; attachments up to 25 MB; signatures; drafts saved to the server; an Outbox for mail written offline; Delay Delivery; voting buttons; High / Low importance and read receipts; drafts that can't reach the server are kept and saved when it's back; S/MIME signing and encryption, with a certificate file or a smart card; OpenPGP signing and encryption with a key Quatrelle makes or imports, the window saying whether every recipient can receive the message encrypted |
The full list of what's missing, ranked, is in docs/gaps.md.
Installers come from the Releases page: .msi
and a portable zip for Windows (x64, x86, ARM64), a .dmg for macOS (universal), AppImage,
.deb, .rpm, Flatpak and .tar.gz for Linux (x86_64, aarch64, riscv64), and a FreeBSD
tarball. The Windows and macOS installers aren't signed yet: Windows SmartScreen asks you to
confirm (More info › Run anyway), and macOS to allow the app in System Settings › Privacy &
Security. Versions: 1.0.x are the stable releases and their fixes; 1.1.x test builds come
first as pre-releases. To run from source:
cargo run --release -p quatrelle -- --sample
--sample opens a local-only sample mailbox, so you can try everything without a server. Run
without it to add your own account (the gear button, or the welcome screen).
To keep no mail on the computer, tick Online only when adding an account (or later in File ›
Options › Mail): its mail stays on the server and in memory while Quatrelle runs. The Windows
portable zip runs from any folder, a USB stick included: its portable.txt keeps everything
Quatrelle writes in QuatrelleData beside it, and passwords only until it closes (put a
portable.txt beside the app on macOS and Linux for the same).
From the command line (passwords come from QUATRELLE_PASSWORD or a prompt, never stored):
cargo run -p quatrelle-cli -- add --email [email protected]
cargo run -p quatrelle-cli -- add --email [email protected] --imap mail.example.com:993 --smtp mail.example.com:465
cargo run -p quatrelle-cli -- add --email [email protected] --jmap https://api.fastmail.com/jmap/session
cargo run -p quatrelle-cli -- test
cargo run -p quatrelle-cli -- sync
cargo run -p quatrelle-cli -- list --limit 10
cargo run -p quatrelle-cli -- search "from:zoe has:attachment"
cargo run -p quatrelle-cli -- send --to [email protected] --subject "Hello" --body "Sent from Quatrelle"
cargo run -p quatrelle-cli -- commands
The browser version (JMAP accounts; see packaging/web/README.md):
cd apps/quatrelle-web && trunk serve
Then open http://127.0.0.1:8774/?sample for the sample mailbox. The latest stable release's
browser version is also at https://dgaudin.github.io/quatrelle/demo/?sample, under the website
whose pages are in site/ (.github/workflows/pages.yml puts both there when a release is
published or site/ changes on main).
The desktop app and the CLI share the cache (%APPDATA%\Quatrelle, ~/Library/Application Support/Quatrelle
or ~/.local/share/quatrelle; override with --data DIR or QUATRELLE_DATA).
| Layer | Crate | Job |
|---|---|---|
| L0 | model | accounts, folders, message keys, flags, jobs and events, JWZ threading, search queries and index, dates, IMAP UTF-7 |
| L1 | mime | parse messages for the list and reading pane, HTML → text, attachments, build outgoing mail, reply / forward drafts |
| L1 | store | the local-first cache: folder state, message sources, pending offline changes, the Outbox; atomic writes |
| L1 | print | messages as PDF pages, with the interface font embedded |
| L2 | jmap | the JMAP transport, async over any HTTP client: the desktop's and the browser's fetch |
| L3 | net | native only: IMAP client on imap-proto, the sync algorithm, SMTP via lettre, JMAP push, Microsoft Graph, Exchange Web Services (NTLM), CalDAV/CardDAV, ManageSieve, POP3, HTTP, DNS, autoconfig, OAuth, Outlook data files, per-account worker threads |
| L4 | engine | the sans-I/O session: views, selection, compose, search, the command registry; queues jobs, applies events |
| L6 | ui-egui | the egui front end (thin: reads the session, runs commands) |
| apps | quatrelle, quatrelle-cli, quatrelle-web | the desktop app, the command line and the browser version |
The engine never touches the network: it emits Jobs and applies Events, which the app connects
to the net worker pool. Tests drive it with scripted events, and in-memory IMAP and JMAP servers
(and Graph, CalDAV/CardDAV and ManageSieve) servers test the real clients and sync code. Details in docs/architecture.md.
Quality gate before every commit: cargo xtask ci (fmt, clippy -D warnings, tests, layering,
assets, wasm).
The scripts in packaging/ build every installer (packaging/linux/package.sh,
packaging/macos/package.sh, packaging/windows/package.ps1, packaging/freebsd/package.sh),
and the GitHub workflows run them through the shared Craft pipelines in
storytold/craft-common-actions:
| Workflow | When | What |
|---|---|---|
ci.yml | every push and pull request | cargo xtask ci on Windows, macOS and Linux |
freebsd.yml | pushes to main, dependency changes | build and test in a FreeBSD VM |
windows-arm64.yml | pushes to main, weekly | cross-build the ARM64 MSI, install and run it on Windows 11 ARM |
packaging-lint.yml | packaging or workflow changes | actionlint, shellcheck, PowerShell, WiX, desktop entry, AppStream, Flatpak |
release.yml | a push to the release branch, or by hand | sign, notarize and package every platform, then draft a GitHub Release |
release-from-run.yml | by hand | the draft from a release run's packages, when a platform failed for a reason outside the code |
pages.yml | a stable release published, or by hand | the release's browser version on GitHub Pages: the demo |
The version lives only in [workspace.package] of Cargo.toml (cargo xtask version,
cargo xtask version set 0.2.0). App icons are drawn by cargo xtask icons; put a square picture
of your own in assets/icon.png and run it again to use that instead.
MIT OR Apache-2.0. Quatrelle started as a fork of ZIDAN44/mailcraft (© the ArtCraft Team and the MailCraft contributors); what it changed from it, and why, is in FORK.md (in French). The rest is © Didier Gaudin.
Built on mail-parser and
mail-builder (Stalwart Labs, Apache-2.0 / MIT),
imap-proto (MIT / Apache-2.0), lettre (MIT),
rustls and ring, html2text (MIT),
ttf-parser and miniz_oxide (MIT / Apache-2.0),
quick-xml (MIT), hayro (MIT / Apache-2.0),
outlook-pst-rw (MIT, Microsoft's outlook-pst reader with a writer added, built from a fixed copy), drag (MIT / Apache-2.0), x11rb (MIT / Apache-2.0) and
egui. Microsoft Outlook is a trademark of Microsoft; Quatrelle is
not affiliated with it and uses none of its code or assets; its interface icons are Microsoft's
Fluent UI System Icons, published under the MIT licence.
| Exchange | An organisation's own Exchange server through EWS, kept on this computer as Outlook's Cached Exchange Mode keeps it; shared mailboxes and calendars; public folders; the server's rules, Outlook's included; automatic replies inside and outside the organisation; the Scheduling Assistant and the Room Finder; folder sizes on the server |
| Assistant | Optional, through any OpenAI-compatible server (OpenAI, Mistral, Ollama, LM Studio…): summarize a message or a conversation, propose a reply, suggest a folder and a category, rephrase what you write; its key stays in the keychain, and nothing is sent until you ask |
| Calendar and people | Day, week and month views; events with recurrences and time zones; meeting invitations by mail (accept, tentative, decline, inviting guests); an address book; synced with CalDAV / CardDAV |
| Mailbox | The File page: account settings, automatic replies (Sieve, JMAP or Exchange), the space used, emptying Deleted Items and Junk Email, rules, Options; Work offline; each account in one .quatrelle data file in Documents\Quatrelle Files, movable as Outlook's are |
| Search | Offline, all folders or this folder; bare words match word prefixes; "phrases", from:, to:, subject:, body:, has:attachment, is:unread, is:flagged, -negation |
| Languages | English, Español, Français, Deutsch, Português (Brasil), Italiano, Русский, 日本語, 한국어, 简体中文, 繁體中文, العربية, עברית: following the system or chosen in Options; right-to-left mail reads right to left |
| Platforms | Windows, macOS, Linux (egui on the GPU), and the browser (WebAssembly; JMAP accounts) |