···11# Changelog
2233+# 2026-04-24
44+- **Disable threading in Sent folder** — the Sent tab now shows each email individually without thread grouping, ordered by date; threading remains active in all other folders; useful because Sent emails are your own outgoing messages and don't benefit from conversation grouping
55+36# 2026-04-23
47- **Download raw email source (`space+d` in reader)** — saves the full raw MIME source as `.eml` to `~/Downloads/` with filename `neomd-YYYYMMDD-<subject>.eml`; useful for archiving, debugging email headers, or importing into other clients; status bar shows download progress and completion; filenames deduplicated automatically
58- **Listmonk newsletter integration** — send newsletters to subscribers by composing an email to a virtual trigger address (e.g. `listmonk@ssp.sh`); neomd intercepts the send and creates a scheduled campaign in [Listmonk](https://listmonk.app) via its REST API instead of delivering via SMTP; configure multiple trigger addresses in `[[listmonk.triggers]]` to target different subscriber lists (newsletter, book, all); pre-send screen shows "Newsletter via Listmonk" with target list IDs and schedule delay; campaigns are created as draft then set to `scheduled` status with configurable delay (default 30 minutes); authentication via HTTP Basic Auth with environment variable expansion for API token; new self-contained `internal/listmonk/` package with full test coverage (httptest mocks); documented in `docs/integrations/listmonk.md`
+7-2
internal/ui/inbox.go
···238238// It threads emails before display — grouped conversations appear together
239239// with tree-drawing prefixes (┌─>) on reply rows.
240240// Sorting respects the user's chosen sortField and sortReverse preferences.
241241-func setEmails(l *list.Model, emails []imap.Email, marked map[uint32]bool, prefixFolders bool, sortField string, sortReverse bool) tea.Cmd {
242242- threaded := threadEmails(emails, sortField, sortReverse)
241241+func setEmails(l *list.Model, emails []imap.Email, marked map[uint32]bool, prefixFolders bool, sortField string, sortReverse bool, disableThreading bool) tea.Cmd {
242242+ var threaded []threadedEmail
243243+ if disableThreading {
244244+ threaded = flatEmails(emails, sortField, sortReverse)
245245+ } else {
246246+ threaded = threadEmails(emails, sortField, sortReverse)
247247+ }
243248 items := make([]list.Item, len(threaded))
244249 for i, te := range threaded {
245250 displaySubj := te.email.Subject