The Homely Mutt
stevelosh.com
stevelosh.com
Do you (or anyone else reading this for that matter) have any insight on how gmail -> imap works with labels when a single message has multiple labels? For example an email may be tagged with "clients" "$JOBNAME" and "receipt". Does it put multiple copies of the message in the local cache, or does it do a hard link, or ...?
So, by default, you're going to be storing multiple copies of each message. It's not a difficult task to use hardlinks instead if you want, but mutt can't make this judgement by itself, because not all of the metadata is identical, and mutt is designed for the general case, not specifically for Gmail.
Note that this is a Gmail issue, not strictly a mutt issue; other IMAP providers don't all have this awkward behavior.
Stopped reading, right there. Why are we still fighting with things that are difficult/ugly to setup/configure? Could have been the best tool ever written, but if I have to spend a half a day figuring it out, and there are other tools that do it better, I'm out.
For other software, e.g. my editor, my mail client - software i'm producing content in, rather than consuming, i'll happily put in a few hours up front to get comfortable on the grounds that i will reap a greater reward in time saved medium term.
Don't use mutt, that's fine. But come up with some better justifications. (edit for full disclosure: I don't use mutt either, having to deal professionally with enough unreadable-in-plain-text mail that it makes more sense for me to do everything in Thunderbird.)
This seems like a pretty reasonable justification to me. Having spent a lot of time authoring emails in different tools, I'm comfortable with what I have. If what I have does what I want and the other tool that people are telling me is better has a disclaimer like the above, then what exactly am I doing wrong?
I'm all for trying out new tools and I spend hours doing so every week. I have to pick and choose what it is that I utilize. I wasn't arguing that the tool might not be valuable for some folks, just that it did a very good job of un-selling me, very quickly.
If I cared that much about ease of configuration, I'd use Textmate instead of Vim, and Colloquy instead of irssi.
Beyond that, if you truly want adoption for a tool, you'd invest time into making sure that you remove the obstacles of someone utilizing it. This is a tool that hasn't had any major releases since "September 15, 2010" and hasn't had any commits for two months.
Hit me all you want, but the same applies to Vim and Emacs for a large percentage of people who admire these tools.
People religiously defend them just because they are 20 something year old terminal GNU/Unixy programs.
If someone came up with Vim today, with a slick polished GUI interface, etc... you'd find far less people talking about how great it is and you'd find the same people who are appreciating them today, making fun of it.
I know that's a generalisation and doesn't involve everyone but I think it is not insignificant.
There are a minority who use and need the tool and appreciate it for what it is and have been long time users. For every 1 of those people, there are thousands more who simply follow the teachings of the cult to be in the cool nerds club.
There seems to be a pattern here, a recipe for a shitty (once useful) program that is no longer relevant that a group just doesn't want to let it go.
It kinda goes like this,
1. Be a 20-something year old program written by some GNU/Unix kernel/hardcore/early developer
2. Run in terminal with a million options and parameters
3. Be extensible with all sorts of weird text file configs, plugins etc...
4. Have a short weird-sounding name that is an abbreviation of some other weird phrase
That's all you need. Then no matter how terrible the user experience is and how outdated and irrelevant your program has become, you'll always have that cult who religiously love your program and insist on extending it so it can be a space shuttle as well as a text editor and an email client.
I should point out I'm not mocking any application in particular and I think many of these tools were fantastic for their times and some of them are still quite good today but my rant is towards this obsessive religious overly-appreciative culture of praising these softwares.
We are past that age of black screens and terminals and horrible user experiences. They were fine for their times but not anymore. I'm not gonna put up with an application that is almost as old as myself and spend hours to configure it just to be a little more efficient.
The efficiency argument seems more like an excuse, because you don't want to admit that you are putting up with the downsides of the application because of all other nerd-culture reasons.
</rant>
lol.
I'd used multiple email programs before finding my way to mutt, including various GUI programs. I'd used elm and pine briefly and somewhat enjoyed them. My primary mailer prior to mutt was Netscape's built-in mail client (NN3/4). The main problems with that were instability and some lack of flexibility.
Mutt took a week or so of getting used to ... and then ... just worked.
Not having an integrated editor (e.g.: making use of vim) was a huge win. One of the huge benefits of console-mode tools is that they can make use of one another in this way.
I've used a great many email clients since encountering mutt, and none are as fast, effective, reliable, and efficient as mutt. I keep coming back.
My complaints? Search through large volumes of mail (10s to 100s of thousands of messages) is slow. Google's use of tags is really useful, and more flexible than a highly-structured set of mailboxes. There are add-ons / forks of mutt which provide both features.
There's also a lot to be said for tools which work over a minimal configuration -- 24x80 vt100 emulation over serial line (your "last ditch" remote access method for most servers), SSH, Connectbot, console, etc.
Knock them all you want. The tools are useful, ubiquitous, standard, and effective.
Thank goodness I already have mutt installed and configured (almost) to my liking.
I do prefer offline e-mail and I actually use Claws under Linux, an X11 port is available for Mac OS
Seems to provide similar functionality.
Also, one app became loved because it has a really innovative UI and the other is an app that eschews a modern UI. I'm not sure many people will logically make the leap from Sparrow to Mutt. More likely, people will gravitate back to to gmail.com, which should be getting a lot of improvements from the Sparrow team in the future.
http://dev.mutt.org/hg/mutt/ says two months.
Mutt is Open Source.
Its user-interface is a bit mutt-influenced, but it's fully query-based and very fast, and of course you can extend it using elisp. A fairly young project, but it's near-fully documented, and the manual has instructions on how to set things up with Gmail.
Really appreciate the work, djcb.
Mutt:
- gets SSL errors with MS Exchange (gnu bug?), doesn't retry the connection and then stops displaying all your email.
- could never get html to text rendering working, almost all emails blank
- gave up on mutt...
Alpine:
- did actually covert html emails to text fine, most emails are readable
- no key rebindins (sic), I have ^T bound to new-window in tmux, too bad that's the only way to run spell check in alpine is to press ^T
- lose connection to IMAP server causes already downloaded mail to no longer be displayed on the screen
- quirky LDAP lookups, I can't type peoples full names, only their login names, then it resolves them fine
- tried to put my IMAP folder first on the list in the config file to make it faster to get to my inbox, crash
- tried to have it startup in my inbox using the startup key sequence, crash
- if there's one letter in my drafts folder, it asks me every time if I wan't to continue it when I compose a new message
- asks me every time if I want to reply to everyone, and if I say yes, it includes me(!?) so I get a dup email
- has pine's legendary inconstant key bindings (or is that a feature?)
- sending a message hangs the whole client until it's been sent
- no real concept of a deleted folder, just puts a D next to it and leaves it displayed on your screen, so you have to expunge manually if you don't want it to clutter your screen
- all in all, alpine is usable though, but there's plenty annoying things in it we used to think were normal back when pine was popular.
- Full name search in LDAP work correctly. Have you set name, surname, and given name attributes correctly in your LDAP setup.
- I exclusively used IMAP and have had no troubles with IMAP folder being fist in the list.
- Starting in the inbox (using key sequences) has always worked for me.
- Reply all does not include me in the Cc. Have you tried setting up alternate addresses field in the settings.
For HTML emails, I have set w3m as my html viewer. w3m works better with complex layouts in html.
- Maybe CentOS 6.3 ships with a bad build or lib that causes it to crash. I'm using alpine-2.02-3.el6.x86_64.
- Setting the alternate address fixed the replying to myself issue, thanks!
- I'll give w2m a shot too. ;-)
EDIT: I suspect the crashes when going into the mailbox are due to it requiring me to enter a password.
http://people.spodhuis.org/phil.pennock/software/mutt-patche...
It'll do search server-side, which means that you have Google's full text search without storing mail locally.
text/html; w3m -M -T text/html %s
image/*; feh -F %s
application/pdf; okular %s
application/msword; oowriter %s
(i also use procmail, with procmail-lib, to filter into monthly mailboxes, and the wonderful mairix http://www.rpcurnow.force9.co.uk/mairix/ to provide fast search. in fact, for me, mairix is the most important part of all this if you want useful, fast email - but i haven't used notmuch so can't compare)mutt can also use IMAP/SSL directly, and I do that for some accounts, where I don't want to have local storage.
Here's my setup for that, in case anyone is interested: https://gist.github.com/45e318c68eb5a52e1646. It's essentially a cronjob (LaunchAgent on OSX) that calls a shell script to update the index periodically, plus a few macros to make searching from within mutt easier. To use this, you'll need to create a "Search" folder for maildir-utils to store results in.
urlview.sh is pretty awful, mis-parsing urls constantly for me. I then discovered extract_url.pl[1], which is much, much better.
offlineimap likes to hang randomly - mail just stops coming in and the process never stops, requiring me to remove the lockfile by hand, then kill the process. I haven't found a replacement for it, unfortunately. Definitely open to suggestions on this front.
The linked view_attachment.sh file has problems, for example, with files with multiple dots in the filename (among others). I have made a few tweaks[2] to it to make it more robust. It still has a few issues, but I've found it to work better for the most part.
msmtp is probably unnecessary nowadays if you have a typical setup. For GMail, add the lines:
set smtp_url = smtp://your@email.com@smtp.gmail.com:587/
set smtp_pass = mah_password
to .muttrc and you should be ready to go.I also wrote a very small, crappy applescript launcher to launch an iTerm with mutt from the OSX dock[3]. It won't open a second copy if already running, but I haven't been able to figure out how to display a badge on the dock to denote unread mail. It may not be possible.
[1] http://www.memoryhole.net/~kyle/extract_url/
[2] https://github.com/xxx/dotfiles/blob/master/osx/mailcap/view...
[3] https://github.com/xxx/dotfiles/blob/master/osx/mutt/mutt-it...
Nowadays I have a cron script that kills any existing Offlineimap processes, and allows a new one to run through once. Works perfectly.
auto_view text/html alternative_order text/plain text text/html
That presents plain text first if it's multiply-encoded, but makes html available. In your mailcap:
text/html; /path/to/browser '%s'; description=HTML Text; test=test -n "$DISPLAY"; nametemplate=%s.html
displays HTML in a browser window for you. mutt launches this when you choose to look at the html version.
But instead, your mailcap could have this:
text/html; lynx -dump %s; copiousoutput; nametemplate=%s.html
which mutt interprets as "filter this through lynx and display it in the terminal" which will solve 98% of your issues. It's fast, too.
It's not Rube Goldberg, it's separation of concerns: dovecot/imap for message serving and storage, and $CLIENT for mail access and processing.
Every so often I get pissed off at my mail client, run up the black flag and start slitting mail client throats[1]. In fact this article started me off on my biannual "doesn't anything not suck" tour, this time looking at claws, alpine and mutt. Anymore though, I just don't give a meh for intricate configuration.
One thing would make me want to spend a day in feverish configuration: if mh ("ah, mh") would do imap. I loved mh back in the day, when there was virtually no interface, just a collection of command line programs. Unfortunately it's pop-only and plain text only, far as I can tell. I have this fantasy of finding the source and ...
I've been searching for the right way to launch the editor in a new tmux pane, although apparently getting that to work smoothly would take a patching effort.
Like the original poster, I'm using offlineimap and maildir's entirely.
What kind of conflicts do you get?
Perhaps is much less of a deal than I thought, after giving a cursory Google I can't seem to find what I read that gave me that impression and I don't see any major warnings not to.
Forgetting to do so is more an annoyance than an End of the World Event, but it's an annoyance which can be avoided with a really simple flag use.
You can even pipe output straight to mutt:
df ¦ mutt -s "disk utilization" foo@example.com mutt -Rf <mailbox name>
... will open the given mailbox in read-only mode (so as not to update read flags and such).In practice, I generally run mutt within screen, with multiple frequently-accessed mailboxes open. I switch mailboxes by moving between screen buffers.
echo "Hello World!" | mutt -s "Test E-mail" -a "file.txt" whomever@wherever.com
Therefore, I now use `mutt` exclusively for sending mail and using Gmail.com for reading and searching mail.mbsync does not watch or poll for changes, but you can run mbsync in a loop from your shell. Or, if you are running Linux on the mail server and client and use Maildirs, you can run mbsync from mswatch (http://mswatch.sourceforge.net/). (Disclaimer: I'm the author of mswatch.)
I use Thunderbird + Muttator for reading from my laptop and mutt through SSH when reading from e.g. work. I can even read it from my Android phone and tablet.
Nowadays I use 'Sup, but I might go (back) to Alpine, because its best feature - the indexer - is also its major drawback, since it hits the disk pretty heavily, which my VPS providers don't care for.
I wrote a guide to Mutt as well. It's geared for the less-tech inclined than your typical ycombinator - but if you know any Linux/BSD noobs interested in getting their feet wet, my Woodnotes guide will give them a gentler splashdown than this advanced guide to setting up Mutt. http://therandymon.com/content/view/42/98/
Well done, Steve - great work on this article.
As much as I like Alpine, being stuck on the terminal is a total deal breaker. It's 2012 ferchrissakes - why are we using email tech that's stuck in the 80s? Why does "modern" have to be at constant odds with "simple and functional"?
We've got this wonderful invention called the graphical user interface.. why not leverage it?
But consider: in the 30 odd years of GUI prevalence, there has never been an example of a GUI email client as simple (for some value of simple), functional, and powerful-for-power-users, as Mutt and Pine.
I think it's at least worth considering the possibility that you're asking for is the equivalent of wondering why you can't just have a lighter-than-air balloon made out of lead; the possibility that GUIs might represent progress along some axes (discoverability and approachability) while fundamentally constraining you along others (power, functionality).
That's exactly my point though - why do most email clients suck so bad? Slow and bloated are the most common adjectives thrown around (Outlook, Thunderbird), and if not that, then there's the weird UI's (Eudora, The Bat) - and then there's the terminal clients, while very nice, very fast, very functional, completely ignore all progress made in user interfaces over the past 20 years. (Pine, Mutt)
It's like you have a choice: Modern, Fast, Functional. Pick any two.
This is something I can imagine coding . Give me something like Pine or Mutt that works in a GUI and can render HTML and images, but still "looks" and runs like Pine or Mutt. Imagine it in your head for a moment - the same UI, but instead of html strewn about everywhere, you have actual rendering of html and images (via choose-your-favorite engine, leaning towards Webkit) in the same window.
I don't think that HTML rendering, speed, and functionality are mutually exclusive goals.
How often do you see images in your emails?
They are usually remote linked content, so your client disables them for privacy reasons. How often do you really click "display images in this message" versus "meh, I got the message and I can spare the rounded corners on this advertisement and instead not send a req back to their server notifying them I've read it".
But I get what you're saying. Without HTML emails we'd all still be looking at those ">" characters for quoting. Hideous. At least now we got dark blue vertical bars. I for one couldn't live without them. That's progress!!
One or both of those fail often enough that I have mutt set to display the HTML part, using w3m to render it as text.
Your company's IT staff probably can't be arsed to change the default, if you can so easily change your email client instead.
For HTML emails I have configured a "printer" in Alpine that unpacks the HTML part and all relevant images and attachments and writes them to disk, finally launching my web browser to show the HTML file. But I generally just view the HTML email through Alpine's own text conversion and only fire up the full version if the email has important-looking images such as graphs. Mostly the images are just header/footer logos and stuff like that, I don't need them.
i use it with these macros
macro index <F8> "<shell-escape>mu find --clearlinks --format=links --linksdir=~/Mail/search " \ "mu find"
macro index <F9> "<change-folder-readonly>~/Mail/search<return>" \ "mu find results"
I haven't added all the features the author pointed out (like server-side search) so excited to make it even better.
More promising is this fork of mutt that adds notmuch support:
notmuch doesn't replace mutt, you use it with mutt/offlineimap etc as your mail indexer, which makes massive mail archives instantly searchable.. (and does this extremely well)
I suspect this what the grandparent was referring to, it's not intended as a mutt replacement, so to complain that it doesn't replace it well is a bit unfair
(notmuch is mentioned in the original link, btw)
And you can write scripts for it in Guile.
A promising alternative is Muttator (http://www.vimperator.org/muttator).
Muttator is from the same team that made Vimperator, a Firefox add-on that changed the way I browse the web.
Sparrow 1.6.4 was released on September 11, 2012. Mutt 1.5.21 was released on September 15, 2010.
You keep using that word. I don't think it means what you think it means.
Mutt may simply be at that point. I use Mutt as my primary MUA in a very similar manner to the author of the article, and I can't really say that there are any features that I want that it lacks. Of course, I can't speak for everyone on that point; for instance, some people actually want to send and receive HTML email, and Mutt can't easily deal with that. But for some of us, lack of HTML support is itself a feature, and when you really have to, piping a text/html MIME part to a browser for rendering is really easy to accomplish.
I know essentially nothing about Sparrow, but I suspect that it is a much newer product than Mutt, has had far less time to mature, and as such simply requires a more frequent release schedule than a project with Mutt's long history.
Basically, a comparison between most recent release dates doesn't necessarily mean what you think it means.
On a more serious note, I use Sparrow every day. About the only quibble I have with it is some of the icons aren't retina versions (hardly a dealbreaker). Otherwise I'd say it meets my needs very well; doesn't that also make it ‘done’, rather than ‘effectively dead’?
Jerry Peek's MH book, free to read. How-to times ten.
The advantages were never enumerated. Most of the article was spent teaching you how to program ^H^H^H configure the thing.
What are the advantages?
E.g. try various combinations of "help = yes/no" and "status_on_top = yes/no" with the sidebar enabled. It's obvious that someone wrote it just to fit their configuration.
One advantage: you can configure mutt to behave just like vim (as far as shortcut keys go).
If you don't use vim you won't understand. If you do use vim, having mutt use vim for editing combined with vim-ish hotkeys makes for a very powerful, simple, and enjoyable tool.
Well, thanks for your insight but that was kind of a dick way to put it. What do you think is so hard to understand about the advantage of common key-bindings between applications?
Great trade-off though. You are such a cool hacker. Too bad you have to jump through hoops to view modern HTML formatted email. Hey you've got some vim key bindings though. Totally worth it.
- It's small, fast, and light. I have a mail client that runs in a terminal window (or console session, or remote SSH session). Navigation, search, and controls are all keybindings. It's fast to fire up, compose, edit, navigate, filter, and send.
- Threading. Mutt's thread-handling is second to none (though strongly influenced by newsreaders such as tin and slrn). Threads may be expanded, collapsed, marked read, navigated, joined, and split. Gmail's "conversation view" is a pale imitation.
- The "limit search" feature really rocks. If you want to find a mail from, say, the 14th of the month forward, from bigboss, subject "widget": "~l ~d 15- ~f bigboss ~s widget". You can filter by date ranges, add either AND or OR keyword matches, search by text, etc.
- Once you've identified a set of messages to look at, you can scan through them very quickly via keyboard navigation. Very useful if you're dealing with a large number of automatic / system-generated mail, though others can be handled as well. Literally: scan several hundred messages in a matter of seconds, looking for major differences.
- Tagged message management. Messages may be tagged ('' key), either individually, or using filter/match rules. Say you've looked at all your Nagios alerts and want to move them to an archive or delete them: "T.;s<archive-name><return>". Much faster than the equivalent in Gmail or any other GUI client I've used. This with limit search is the killer feature for me.
- In-line handling of MIME attachments. There are console-mode readers for many document formats, including HTML, Word docs, spreadsheets, and presentations. Even if they don't give you a fully-formatted view of the document, you can get the gist of meaning without firing up a full-fledged GUI app.
- Spawning MIME attachments. If inline isn't sufficient, there's the attachment index (for mails with attachments) and you can launch these using the handler of your choice (specified by your mailcap file). Attachments may also be saved from the index individually or collectively.
- Adding attachments. Similar to the MIME viewer -- this is actually faster and more flexible than most GUI tools (in particular, Gmail). You can also add messages as attachments, not just files.
- Speaking of GMail: if you do want to view a message in its GUI wholeness, just pop open a browser and view it there through GMail. IMAP means you've got a synchronized set of folders locally and remotely. You can also share IMAP access with a local GUI client (KMail, Thunderbird, Evolution, etc.). This is particularly helpful for calendaring (I'm not aware of a MIME handler that will add ical event to a calendar).
- Comprehensive PGP support. It's highly unappreciated and underutilized, but both encryption and signatures are supported. At the very least you can confirm signatures readily on security bulletins from most major Linux distros.
- Incorporated address books for completion. Typically via an included 'aliases' file. Start typing a name, hit 'tab', and a screen of completions appear. Do this right an you can grab a list of related names in one pass. You can also alias lists of addresses you use frequently (say, "family" or "engineering team" or "zombie apocalypse task force").