The Mail app is a full-featured email client with compose, reply, forward, folders, search, and per-user VFS JSON persistence.
Core Features
- Folder System: Inbox, Sent, Drafts, Trash, and custom user-created folders.
- Compose & Reply: Full compose flow with To, Cc, Subject, Body, and attachments.
- Reply / Reply All / Forward: Standard email response workflows.
- Search: Full-text search across messages.
- Star & Read Tracking: Toggle star and mark read/unread.
- Draft System: Save drafts, edit drafts, and send composed messages.
- VFS Persistence: Messages stored as JSON files at
/home/<user>/Mail/<Folder>.json. - Seed Messages: Configurable
SeedMessages[]array and welcome mail on first run. - Attachment Previews: VFS-resolved attachment display.
- Unread Badges: Folder sidebar shows unread message counts.
Technical Details
- Controller Class:
UMailApp(Inherits fromUAppBase) - Widget Class:
UMailWidget(Slate host, implementsIAppContentWidget) - Window Specs:
- Initial Size:
850x550 - Resizable:
true - Maximizable:
true
- Initial Size:
- Category:
"Office" - Installed By Default:
false(must be installed via Software Center)
Data Structures
FMailMessage:MessageId(FGuid),FromName,FromAddress,To[],Cc[],Subject,Body,Timestamp,Folder="Inbox",bIsRead,bIsStarred,bIsDraft,Attachments[].FMailAttachment:DisplayName,VFSPath,MimeHint,SizeBytes.FMailComposeState:To[],Cc[],Subject,Body,Attachments[],InReplyToId,EditingDraftId.
Key Controller APIs
Mailbox Operations:
AddMessage/DeleteMessage/MarkRead/ToggleStar/MoveMessage/CreateFolder
Compose Flow:
BeginCompose/Reply/ReplyAll/Forward/EditDraft/SaveDraft/SendComposed
Search & Persistence:
SearchMessages/SaveMailbox/LoadMailbox
Configuration:
SeedMessages[]— Ship a starter inbox with no C++.bSeedWelcomeMessage— Auto-generate a welcome email on first run.UserEmailAddress— The user's display email address.
Delegates
OnMailboxChanged/OnFolderChanged/OnMessageSelected/OnComposeStateChanged(dynamic/BP).
Architecture Notes
The UMailApp controller owns the full mail model — the widget is a thin delegate-bound view that re-renders on state changes. This follows OSSIM's controller-view separation where the controller owns data and the view subscribes to delegate notifications.
