- MailViewModel.setup() now creates SMTPClient provider when SMTP config is present,
passes it to ActionQueue so send actions work
- ActionQueue is passed to SyncCoordinator so pending actions flush before sync
- Add ensureBodyLoaded() to fetch message body via IMAP before opening compose
- ThreadDetailView uses callback instead of binding for compose requests,
allowing ContentView to fetch body before presenting sheet
- Add SMTPClient dependency to both app targets in project.yml
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>