Privacy Architecture

Last updated: 2026-09-11 · as of app version 1.0 (build 24)

"Your email body never leaves your device" is not a promise — it is a structure. This page lists exactly what MailMail sends where, and what the code makes impossible. The legal notice is the Privacy Policy.

At a glance

Mail providerNaver · Gmail · Outlook · IMAP(where your mail already lives) Your iPhoneBodies, summaries, passwords stay hereOn-device AI summary & translationKeychain (device-only)No server Apple WatchSummary cards only(no body) Wake-up signal (Worker)Receives: push token only iCloud (Pro, optional)Encrypted learning weights only direct TLS cards only token E2E encrypted body → serverno such path exists

MailMail has no server that stores or relays email. Your iPhone connects directly to your mail provider (Gmail, Outlook, Naver…), summaries and translations are produced by Apple's on-device models on the iPhone, and only summary cards cross to the watch. The one server we run is a wake-up beacon that tells the app "there may be new mail" — and all it knows is a push token.

1. What never leaves the device

DataWhere it livesProtection
Email bodiesLocal database on iPhone/iPad (SwiftData)Encrypted until first unlock (iOS file protection). Never sent to the watch, a server, or logs
AI summaries (headline, key points, labels)Local DB → watch cardGenerated on-device by Apple Foundation Models. No external AI API calls
TranslationsMemory onlyApple Translation (on-device) → discarded right after summarizing. Never stored
App passwords · OAuth tokensiPhone KeychainDevice-only (iCloud Keychain sync blocked). Never sent to the watch or a server
Sender · subjectLocal DB → watch cardThe watch card carries sender name, subject and summary only — it has no body field
Profile avatar photoApp-private folder on iPhone256px thumbnail only, original discarded. No backup, no sync
Personalization learning dataiPhone localSenders stored as hashed tokens only (no plaintext email). Pro sync ships weights and hashes, end-to-end encrypted

2. What leaves the device — the complete list

This is the entire set of outbound data. If it is not in this table, it is not sent.

ToWhatWhy
Your mail provider (Gmail, Naver, Daum, work IMAP)IMAP login, mail fetch, read/archive flagsDirect TLS connection to your own mailbox. We are not in the path
Microsoft (Outlook)OAuth sign-in, Graph API mail readsSame — direct. Tokens stay in Keychain
MailMail wake-up beacon (Cloudflare Worker){ token, env } — the APNs push token and environment, exactly two fieldsSends a content-free push about every 10 minutes so the app can sync in the background. Any extra key is rejected with 400
Same beacon (Outlook users)subscription ID, push token, environment, verification hashWhere Microsoft posts "new mail" notifications. No mail content included
Apple (App Store)Purchases and receiptsStoreKit. Verified on-device
Apple (iCloud, Pro, optional)Encrypted personalization profile blobKeeps your learning when you switch devices. Contents = weights, sender hashes, category affinity. Key lives in iCloud Keychain — we cannot decrypt it
Your own Reminders appExtracted to-do title + mail subjectPro feature, only when you tap. Never the body

Verify it yourself: put the app behind Proxyman or Charles. The only requests to mailmail.app are /v1/register and /v1/unregister (plus /v1/graph/* for Outlook), and their bodies contain nothing but a token string.

3. What we don't do

4. How the code enforces it

Enforced by types and link structure, not by policy — so it is hard to break by accident later.

5. Honest limits

Changelog

← MailMail home · Privacy Policy