I've used a reasonable number of MUAs in my time, and none of them do exactly what I want. So, I thought I should produce a list of what I want in an MUA, in the hopes that either someone's written one that does all these things, or that I'll get annoyed enough to hack one up in python or something.
Other things like scriptability would be good, but I could live without them. I'm sure I'll think of some more just after I hit "Update", too.
- Decent IMAP support
- That means things like dealing with other mailers accessing the account underneath you, sensible caching behaviour, and so on
- Choice of editor
- For me, this means emacs, but it should be possible to plug it into anything you fancy, possibly including whatever the text-editing widget your GUI toolkit includes
- Ability to arbitrarily edit headers
- If I want to send email as From: foo@bar.invalid, X-Tickybox: nooo, then it should let me. Maybe checking for valid syntax would be sensible, though ;)
- Understand mail messages fully
- (see my recent rant about Mail.app, for an example of how not to do this
- Sensible MIME handling
- That means sensible default behaviour, and easy configurability. Mail.app falls down in this regard as regards text/rtf, for example
- Support submission, and other security enhancements
- ...and behave correctly wrt configuration (see
fanf's rant) - Console operation
- A GUI would be nice, but I really want to be able to ssh in and run my mail
- Virtual-folder like things
- I really like VMs virtual folders, and want something similar in any other mailer
- Deal gracefully with large mailboxes
- VM's on-disk format sucks rocks really badly with a years worth of my mail
- Ability to search across sets of mailboxes
- ...but with better than "search all my mail" granularity
Other things like scriptability would be good, but I could live without them. I'm sure I'll think of some more just after I hit "Update", too.
(no subject)
(no subject)
(no subject)
(no subject)
Due to the startup time of emacs, this requirement alone leads me to believe that it should be one in written in elisp.
FWIW, I too am on the lookout for an alternative MUA. I use mutt and am very happy with it, but would like a couple of extra features:
1) Folder overview, showing how many unread/total messages exist in all known-about folders
2) Ability for multiple user profiles. (I know mutt allows arbitrary From: headers; I'd like to be able to select from a list, maybe using folder/subject/recipient info as a default)
Maybe an elisp one is the solution because it's beginning to sound like an extensible environment is needed.
As a final thought, I hear that af is extensible and was co-developed by someone we know well. Maybe I'll give that a go.
(no subject)
I've never heard of "af"!
startup time
Re: startup time
(no subject)
This seemed like a good idea to me because my editor of choice is Jed, which isn't nearly as widely used as (say) emacs, so while I want an MUA embedded in Jed, it didn't seem sensible to restrict it to only being embedded in Jed.
As a further plus point, this architecture forces an efficient mail storage mechanism: because the command-line program is restarted every time something gets done, it fundamentally cannot afford to store mail in any way which requires O(N) work on startup or anything like that.
(Unfortunately, lack of time stalled the project, and also I had second thoughts about the efficient mail store I'd designed. It seems unlikely at this stage that I'll ever finish the MUA, although bits of it have usefully spun off into other of my programs.)
(no subject)
(no subject)
So I devised plan B. First, the actual mail is held in a series of mbox files, each with a fixed maximum size. Mail is thrown sequentially on to the end of the highest-numbered file until it fills up, at which point a new file is started. Secondly, a database is kept alongside the mboxes, containing all index-useful header information (subjects, from, to, cc, etc) and indexing the actual mail by (filename,offset,length) tuples. Thus, in normal usage, the program never has to actually parse an mbox from beginning to end. Thirdly, the same information stored in the database is also stored in a series of flat text files, one for each mbox containing the information about all the messages in that mbox. This deals with the incremental backups problem because each mbox (and each index file) eventually stops changing. The only single file which continues to grow and change is the database file, and since that can always be reconstructed from the textual index files alongside the mboxes there's no need to back it up, so if your sysadmin maintains an un-backed-up partition then it's safe to keep it on that. Meanwhile, the technological lock-in is also solved because all the mail is held in the world's most standard mail storage format and hence can easily be extracted into another MUA without needing the aid of the one which understands the database. (This would lose the folder organisation, admittedly, but some reasonably trivial Perl could reconstruct that from the textual indices.) Meanwhile, lookup of any given message is nicely O(log N), and if the database has sufficient indexing magic in it then all sorts of other common lookups ("the last 500 messages in $category", "all messages exchanged with $user") become efficient as well.
The only snag with this arrangement, which didn't start to bother me until half way through coding, is that it really doesn't make it easy to modify or delete a message from the mail store. Modifying a message is something I do quite often, because idiots have a habit of sending me bloody enormous attachments which I absolutely do not need, and if I kept them all then my mail archive would be even more unmanageable than it is now. So my current (also home-grown) MUA has a "delete attachment" command which I use fairly regularly, and which the above mail store design wouldn't have supported. As for deleting messages, well, I don't do it often, but the more spam I get the more I start to wonder whether I really need to keep it all or whether I ought to start using the delete button. Most of the problems with deletion and editing centre around atomicity: it's OK to add data to the end of an mbox and then update the database to say it's in there, because if there's a failure between those two steps then the data is still consistent. But if you shuffle everything up in an mbox file, you inevitably have a moment when the file offsets in the database don't match the ones in the mbox, and a failure at that point is catastrophic. I never figured out a good solution to this.
(no subject)
(no subject)
Arrgh. I'm supposed to be not-coding at the moment for exhaustion reasons. The last thing I need is motivation to get back on Timber development :-)
(no subject)
(no subject)
emacsclient is your friend.
(As are fast computers, of course.)
I'd add a few more wishlist items to the manifesto, were this to be my ideal MUA as well:
(no subject)
(no subject)
(no subject)
I have a Small Shell Script that does this for maildir++; mutt's IMAP backend (but not, annoyingly, the direct-access maildir one) will report number of new messages in the folder list that takes entirely too many keypresses to reach and, UI-wise, isn't where a user of Gnus (or Mulberry, or...) would expect it to be.
2) Ability for multiple user profiles. (I know mutt allows arbitrary From: headers; I'd like to be able to select from a list, maybe using folder/subject/recipient info as a default)
I bashed this onto Gnus once, with elisp code in gnus-posting-styles. I may even still have a copy of it somewhere.
(no subject)
Decent IMAP support
Choice of editor
Ability to arbitrarily edit headers
Understand mail messages fully
Sensible MIME handling
Console operation
Deal gracefully with large mailboxes
I'm not sure about these though:
Support submission, and other security enhancements
Virtual-folder like things
Ability to search across sets of mailboxes
(no subject)
(no subject)
Using an emacs analogy, maybe have a check performed on message submission saying "Message invalid - send anyway? (yes or no)", much like attempting to quit with unsaved files.
MUA
(no subject)
It is online-only, so no cache.
No virtual folders (I just use physical folders; Hermes handles them reasonably efficiently)
I'm not sure if its alternate-editor feature allows you to edit the headers in free form or not; however you can configure it to add extra headers of which it lets you edit the contents.
(no subject)
(no subject)
(no subject)