gene

generic mail client

2026Swift · SwiftUI · macOS · iOS · SQLitewip

A pure-Swift IMAP and SMTP client that talks to any standards-compliant mail server. One privacy level — Seamless, Balanced or Minimal — sets how much a message is allowed to do when you open it, from full HTML rendering down to plain text that never touches the network.

A mail client decides on your behalf how much a message is allowed to do when you open it: load remote images, pull external stylesheets and fonts, or report back that you read it. Most clients bury those decisions across a settings pane, or do not offer them at all. This one puts them on a single control, and the rest of the app follows from where that control sits.

how it works

  • One level sets around sixteen behaviours together: HTML rendering mode, remote content policy, tracking-parameter stripping, whether outbound headers identify the client, whether the Message-ID carries your hostname, and the minimum TLS version. Any individual setting stays overridable, the way a single pref can be flipped behind Tor Browser’s slider.
  • HTML renders in a WKWebView behind a generated Content-Security-Policy, with a navigation delegate applying the same rule independently, so one mistake in the policy string cannot leak a tracking pixel. The plain-text converter is hand-written because NSAttributedString(html:) resolves remote resources while parsing, which would defeat the strictest level.
  • Sync uses IMAP QRESYNC and CONDSTORE: a SELECT returns changed flags and deleted UIDs since the last modification sequence, instead of diffing UID lists.
  • A TOML file is the source of truth on both platforms. The settings screen edits it in place, so comments, spacing and key order survive a round trip.

status

Configuration, MIME parsing and composition, storage, sync logic and SMTP submission work and are covered by 88 tests. Both apps build and run. The IMAP path has not yet been exercised against a live mailbox, and there is no compose UI, outbox or attachment download.

The source is closed. Distribution is planned as a paid app, and there is no release yet.