Organising mail¶
Every change here is durable: the row moves at once and the daemon replays it to the server on its next pass. Offline changes queue.
Read, flag, delete¶
| Key | Does |
|---|---|
| M | toggle read / unread |
| Shift+M | mark the whole listing read |
| Shift+F | toggle the flag (⚑) |
| D | move to trash |
Shift+M marks the entire selected folder or search read, not just the visible rows. Opening a message marks it read.
Inside the trash folder, D deletes permanently, behind an
explicit delete forever? y/n.
Archive¶
A sends the selected (or open) message to the account's
archive folder. Change it from the default archive:
[account]
archive = "archive"
Move¶
| Key | Does |
|---|---|
| C | open a folder picker |
| J / K, Enter | select, move |
| Esc | close |
Or move by name (takes a folder alias, the real path, or
inbox for the account root):
:move <folder>
The trash folder defaults to trash; change it per account:
[account]
trash = "trash"
Bulk actions¶
Four : commands act on every message the current search
matches, not just the rows loaded into the view:
| Command | Does |
|---|---|
:archive-all |
file every match to its account's archive folder |
:trash-all |
move every match to trash |
:move-all <folder> |
move every match to the named folder |
:delete-all |
delete every match permanently |
<folder> takes the same names as :move: a folder alias,
the real path, or inbox for the account root.
Nothing runs before a confirmation modal that states the
exact count in its title and lists up to ten of the matched
subjects (and N more beneath them), so what is about to
happen is visible before it does. Y confirms; Esc or
N cancels with nothing queued. Above a hundred matches
the modal leads with a louder warning, since the sweep goes
well beyond the visible list, and :delete-all always warns:
it is permanent, cannot be undone, and unlike D it is not
confined to the trash folder.
Confirming queues one durable op per message, the same ops as the single-message keys: the rows leave the listing at once and the daemon replays the changes to the servers on its next pass, offline included. A message present in two accounts is acted on in the account you are viewing (see below).
The natural rhythm is search, read the count, confirm. Archive an old newsletter in one pass:
/from:updates@example.com date:..2025
:archive-all
A search with no matches refuses with
nothing matches this search. The
query language does the aiming.
Delivery rules¶
Rules run in the daemon as mail arrives, first match wins:
[[rules]]
match_list = "~sircmpwn/aerc-devel"
move_to = "lists/aerc"
[[rules]]
match_sender = "billing@example.net"
tag = "invoices"
move_to files the message; tag adds a notmuch tag you can
search and save. See accounts for
the full rule shape.
Unsubscribe¶
:unsubscribe acts on the open message's List-Unsubscribe
header:
- A one-click (RFC 8058) list asks for confirmation, then the daemon performs the POST off your machine.
- A
mailtoentry opens a prefilled compose. - A web-only entry shows you the URL and touches nothing.
One message in two accounts¶
A message delivered to two synced accounts at once (sent from one, Bcc'd to another, say) is one search result with a copy under each account. Every action, bulk ones included, lands on the copy in the account you are viewing, and under the unified scope a received copy wins over a sent one, so archiving or deleting what you see never strands the copy on screen while acting on the other account's file.
Conflicts¶
The server wins. If a message you changed offline was deleted elsewhere first, the op is dropped and the log says so; a failed op never wedges the queue behind it.