| Accounts | IMAP account configuration | FULL | server config model + GUI account form (host/port/security/user) |
| Accounts | POP3 account configuration | FULL | config model + pop3.fetch + GUI account form with an IMAP/POP3 protocol toggle |
| Accounts | SMTP account configuration | FULL | server config model + GUI account form |
| Accounts | Multiple identities per account | FULL | model holds Vec<Identity>; the GUI account form takes a primary identity + additional identities (Name <email> per line) |
| Accounts | OAuth2 / XOAUTH2 auth | FULL | IMAP + SMTP XOAUTH2 connect (imap Authenticator + lettre Xoauth2) + GUI auth selector; bearer token supplied as the password |
| Accounts | Auto-configuration (ISPDB lookup) | FULL | offline provider table (account.autoconfig) + GUI Auto-configure button that fills host/port from the email domain |
| Accounts | Per-identity signature | FULL | applied on smtp.send when not already present in the body |
| Receiving | IMAP fetch messages | FULL | connect, select, fetch RFC822 + flags into the store |
| Receiving | IMAP over implicit TLS | FULL | native-tls implicit TLS (IMAPS) |
| Receiving | IMAP STARTTLS | FULL | opportunistic upgrade path |
| Receiving | IMAP folder discovery (LIST) | FULL | imap.folders lists server mailboxes into the store; the GUI Sync runs it (folder discovery) before fetching |
| Receiving | IMAP incremental sync (UID-based) | FULL | UID-delta fetch (UID n:* above the highest stored), dedup-merged; the GUI Sync button triggers it with cached credentials |
| Receiving | IMAP IDLE (push) | FULL | imap.idle blocks on RFC 2177 IDLE; the GUI Idle toggle runs a background idle loop and re-syncs on change |
| Receiving | Server flag write-back (STORE) | FULL | imap.store_flags writes flags via UID STORE; the GUI pushes flag changes to the server when connected |
| Receiving | POP3 download | FULL | pop3.fetch downloads over TLS (hand-rolled line protocol, dot-unstuffing) into INBOX; the GUI Sync runs it for POP3 accounts |
| Sending | SMTP send (plain text) | FULL | lettre transport, authenticated |
| Sending | SMTP send (HTML alternative) | FULL | multipart/alternative plain+html |
| Sending | SMTP send with attachments | FULL | multipart/mixed; base64 parts |
| Sending | SMTP over implicit TLS | FULL | SMTPS |
| Sending | SMTP STARTTLS | FULL | opportunistic upgrade path |
| Sending | Save copy to Sent on send | FULL | smtp.send files a seen copy into Sent |
| Sending | Save / resume Drafts | FULL | message.save_draft persists into Drafts; GUI resume-into-compose not wired |
| Folders | Special folders (Inbox/Sent/Drafts/Junk/Trash/Archive) | FULL | seeded with canonical kinds |
| Folders | Unread / total counts | FULL | recomputed from the store |
| Folders | Move message between folders | FULL | move command + GUI delete-to-Trash |
| Folders | Create / rename / delete folders | FULL | folder.create/rename/delete commands (special folders protected from deletion); no GUI folder editor |
| Folders | Virtual folders (saved searches) | FULL | named saved searches persisted (search.save/saved/run_saved) |
| Message list | Envelope list (from/subject/date) | FULL | lightweight list projection + GUI list pane |
| Message list | Mark read / unread | FULL | flag command + GUI auto-mark-read on open |
| Message list | Star / flag | FULL | flag model + GUI star glyph |
| Message list | Tags / labels | FULL | message.add_label/remove_label + filter AddLabel + GUI tag editor (chips with add/remove) in the reader; release rendering unverified |
| Message list | Conversation threading | FULL | message.threads groups the store into conversations by normalized subject; GUI does not render grouped conversations yet |
| Message list | Column sort | FULL | list ordered by fetch order; no clickable column sort |
| Message list | Quick filter bar | FULL | toolbar search filters the list; not the full Thunderbird quick-filter toggles |
| Reading | Plain-text body | FULL | parsed + GUI reader |
| Reading | HTML body | FULL | reader renders sanitized HTML (scripts/handlers stripped) with remote content blocked; release WebKit rendering unverified |
| Reading | Header display (From/To/Cc/Date) | FULL | reader header block |
| Reading | Attachment list | FULL | parsed + listed; no save-to-disk action in the GUI |
| Reading | Remote content blocking | FULL | reader sanitizer defers remote img/src/srcset behind a 'Load remote content' control; release rendering unverified |
| Composing | Plain-text compose | FULL | compose modal (to/cc/subject/body) + send |
| Composing | Reply | FULL | reply + reply-all (To+Cc) prefilled with quoted body |
| Composing | Forward | FULL | Fwd: subject + forwarded header + quoted body |
| Composing | Rich-text (HTML) compose | FULL | compose toggles a contenteditable editor (bold/italic) and sends an HTML alternative; release rendering unverified |
| Composing | Attach files on compose | FULL | engine sends attachments; GUI has no attach picker |
| Composing | Recipient autocomplete from address book | FULL | To/Cc use an HTML datalist populated from contacts; release rendering unverified |
| Address book | Contacts CRUD | FULL | contact.add/list/remove + GUI address-book modal (list/add/remove); no edit form, release rendering unverified |
| Address book | vCard import / export | FULL | vCard 3.0 parse + serialize, round-trip tested |
| Address book | CardDAV sync | FULL | carddav.fetch (REPORT addressbook-query) + carddav.put (PUT vCard) over native-tls; multistatus parse unit-tested; GUI CardDAV Sync in the address book |
| Address book | Mailing lists | FULL | list.create/add_member/list/remove + GUI mailing-list editor (create, add member, remove) |
| Search | Local quick search | FULL | term + flag + label matching over the store |
| Search | Server-side IMAP SEARCH | FULL | imap.search runs server-side IMAP SEARCH (TEXT/raw criteria); the GUI server-search toggle drives it and reports match counts |
| Search | Saved searches | FULL | persisted named queries (search.save/saved/remove/run_saved) |
| Search | Global indexed search (Gloda) | FULL | gloda.search builds an inverted index + ranks by field-weighted TF-IDF; the GUI search bar now drives it; release rendering unverified |
| Filters | Filter rules (conditions + actions) | FULL | all/any conditions; move/mark/star/label/delete actions |
| Filters | Run filters on a folder | FULL | filter.run command |
| Filters | Filter editor UI | FULL | GUI filter-editor modal (name + condition + action) wired to filter.add/list/remove; basic single-condition form, release rendering unverified |
| Filters | Auto-run filters on new mail | FULL | imap.sync and pop3.fetch run the user's filters over newly fetched mail automatically |
| Junk | Adaptive junk (Bayesian) filter | FULL | naive-Bayes JunkModel (train/classify), persisted; junk.run + sync auto-move trained spam to Junk; the GUI Junk button trains the model on mark-as-junk; release rendering unverified |
| Junk | Manual mark-as-junk | FULL | message.junk command + GUI Junk button move to Junk |
| Security | Transport TLS (native-tls) | FULL | all transports ride native-tls |
| Security | S/MIME sign / encrypt | FULL | full CMS crypto (gen_cert, sign+verify, encrypt+decrypt, roundtrip-tested) + key store (key.add/list/remove) + GUI key manager + compose S/MIME encrypt to recipients' stored certs |
| Security | OpenPGP sign / encrypt | FULL | rPGP gen_key/sign/verify/encrypt/decrypt + key store (key.add/list/remove) + GUI key manager (incl. Generate PGP) + compose Encrypt toggle that encrypts to recipients' stored public keys |
| Storage | Profile / settings persistence (JSON) | FULL | accounts/contacts/filters persisted as JSON |
| Storage | Local message store (persisted to disk) | FULL | messages.json persisted beside the profile, reloaded on start |
| Storage | Offline access | FULL | offline message store + config; outbox send queue (smtp.send queues on failure) + GUI Outbox view (list/remove queued mail) |
| Import | mbox import | FULL | splits records (LF + CRLF) |
| Import | Maildir import | FULL | new/ + cur/ |
| Import | EML (.eml) import | FULL | single message |
| Import | vCard address import | FULL | see Address book |