Last I looked there were two main local mail clients for the commandline with good emacs,vim bindings: notmuch and mu. Both store mail locally and both use xapian for efficient local searching.
When I was choosing between the two, there was one big difference between the two: notmuch was built around an idea that you mark your messages with tags for organization, while mu assumed you organize stuff into IMAP folders. The notmuch tag database is not a standard IMAP concept, so syncing your IMAP directories wouldn't sync your tags, and moving from one machine to another required extra work. mu by contrast just does the normal IMAP thing, so you sync the IMAP on one machine, and all your other machines can read the IMAP data, and that's it.
I've been using mu for years, and it's fantastic. From personal experience, the tags/folders distinction is mostly immaterial: the vast majority of searches are for text or sender or subject, or something.
If I'm misrepresenting notmuch here, somebody please correct me!
> The notmuch tag database is not a standard IMAP concept
This is not quite true. IMAP has a notion of “keywords”, which are arbitrary strings, that you can associate with any message.
This is described in the IMAP RFC [0]. Unfortunately, very few email web applications expose this feature in their UIs so it remains obscure.
FWIW Google Mail does store unlimited keywords on the server. So does Fastmail but last time checked (years ago) it only supported a maximum of 128 per IMAP mailbox.
I prefer notmuch because it is extremely simple. Everything is a tag. There are no folders.
Furthermore, notmuch never ever touches your mail storage. It just operates on tags. It is up to you how to turn tag changes into actions. I find this incredibly elegant and flexible.
I do not tag things manually. I tag incoming messages automatically using searches. Since search is so powerful and quick, I do not really feel I need tags. If you do, mu or mutt/neomutt might be better suited.
neomutt's main selling point was that it has first class integration with notmuch and that because that it has a unified inbox like the desktop clients.
One thing I could never figure out with the folderless approach like neomutt is how to make per account compose and responses. In mutt I would set the account based on the folder I'm in and depending on what I'm responding to, but I don't know how to do that in neomutt or rather how to do it when using notmuch in neomutt.
I do use mu4e, which seems to be a bit easier to configure for multiple accounts.
You do it with folder-hooks. When you switch to a query that returns mail from a different account, you set a folder-hook that switches your From: address.
i use tags for annotations and actions: this email i need to reply to. that one links to a story i want to read later. etc. it's not possible to search for that without tags, because those states change and don't depend on the actual emails
- a homeserver who grab emails from upstream and allow ssh access
- muchsync (who run over ssh) from my desktop(s)/laptop to the server
Doing so allow full sync, no need to sync mails in a maildir with other means, all you need is SSH. Sure it's not "P2P", there is still a central point of potential failure but the homeserver run many things, not just my mail so it's something I care more than the rest and it's anyway under my full control...
mu on it's side offer a nice extras (separate small binary who wrap external WebKit) to render html emails as a modern WebVM (the monsters commonly known as "browsers" for legacy reasons), while in most client (i.e. notmuch-emacs by default you just get text or shr-rendered html).
Outside Emacs I think there are one or two TUI (curses) client able to run or notmuch or mu, and a notmuch GUI (Astroid) who is not much comfy IMVHO. Notmuch also have a small external webserver with a built-in webUI but seems to be abandoned.
Unfortunately ALL use emails, almost nobody care to archive and use them on personal iron treating mails like a proprietary third party platform bound to an webmail... A day most will regret that, but still most would not learn anyway...
I want to give a shout-out to “lieer” (formerly “gmailieer”) which is a nifty tool for fetching to maildir and two-way tag synchronization between gmail and notmuch: http://lieer.gaute.vetsj.com/
Gotta love the naming choice: of the two mentioned well-known CLI clients with good Emacs and Vim integration, notmuch and mu, guess which one is mujmap made for?
This is roughly correct. There are utilities that move email between IMAP folders based on their notmuch tags, but obviously the two are different concepts so there's not a 1:1 mapping.
The way I, and some others I know, deal with this is to simply think of their notmuch database as separate from, but complementary to, the IMAP data. The database is stored centrally. (I personally do this by replacing the notmuch command on my clients with a shell script that runs notmuch over ssh. Works fairly transparently.)
This is exactly the same concept as Thunderbird and Outlook smart folders. Gmail addresses this using labels which adds metadata to the IMAP messages. IMAP folders are not reliable to tag messages as having multiple tags essentially duplicates the message on the IMAP server.
When I was choosing between the two, there was one big difference between the two: notmuch was built around an idea that you mark your messages with tags for organization, while mu assumed you organize stuff into IMAP folders. The notmuch tag database is not a standard IMAP concept, so syncing your IMAP directories wouldn't sync your tags, and moving from one machine to another required extra work. mu by contrast just does the normal IMAP thing, so you sync the IMAP on one machine, and all your other machines can read the IMAP data, and that's it.
I've been using mu for years, and it's fantastic. From personal experience, the tags/folders distinction is mostly immaterial: the vast majority of searches are for text or sender or subject, or something.
If I'm misrepresenting notmuch here, somebody please correct me!