For the love of Mutt!


I have been trying to see how much I can get done just using the terminal. I have my Debian partition on my PowerBook G4 running Awesome. It is a very lightweight tiling window manager. It does take some practice getting use to but once you have it set up, navigating around is not hard. One tool that I have just come to love is the mutt email client.

I have found very few lightwieght email clients that are really good. Slypheed comes the closest at least in my experience. Thunderbird can be really resource intensive, especially if you are processing a lot of email. This is where the power of mutt comes in. It is simply fast. I can read, reply, delete, and save messages much faster than a gui mail client. This means less of a load on my PowerBook. It also has gpg support so you can sign and encrypt your messages if needed. It really customizable, all your setting are on a config file. What I would like to do is give a walk through on how I have mutt configured and suggest some additional plugins that will enhance the experience.

Install

If you do not have mutt installed in your system it is fairly simple.

apt-get install mutt mutt-patched

Set up and Configure

The package mutt will install the base application. The package mutt-patched install an add-on that allows you to have a sidebar for your folders. Once these install you will want to create a directory named .mutt. Here is where you will store your config files and directories. You can do most of this in one command.
mkdir -pv .mutt/{cache,certificates}

If you look in the /usr/share/doc/mutt/examples directory you will see some sample configuration files. The only one you really need to copy to .mutt/ is the gpg.rc file.

Now it is time to make our muttrc configuration file. I will be working under the assumption that gmail will be where the email is hosted.

The first thing you will want to do set up your credentials for imap and smtp. The imap credentials is what pulls down your emails and folders, whereas the smtp account allows mail to be sent through your provider's email system. Below is an example.

set realname = 'your name'
set from = 'your email'
set use_from = 'yes'
set envelope_from ='yes'
set imap_user = 'your gmail account'
set imap_pass = 'password'
set editor = vim
#smtp
set smtp_url = 'smtp://your email account'
set smtp_pass = 'your password'
set ssl_starttls = yes
set ssl_force_tls = yes

I would strongly recommend that if you are using gmail to enable 2-step authentication and application specific passwords. The next thing you might want to do is define your remote folders specifically you inbox, drafts, and trash.

# Folders
# REMOTE GMAIL FOLDERS
set folder = 'imaps://imap.gmail.com:993'
set spoolfile = '+INBOX'
set postponed ='+[Gmail]/Drafts'
set trash = '+[Gmail]/Trash'

When you want to save a draft in mutt, it will ask if you want to postpone it. Mutt will then save to where you defined in the code above. Also it would be a good idea to define local cache as well. Below is an example.

# Local cache
set header_cache =~/.mutt/cache/headers
set message_cachedir =~/.mutt/cache/bodies
set certificate_file =~/.mutt/certificates

The next part is opitional and only needed if you want the sidebar and installed the mutt-patched package. If you did not you can still access your gmail folders by hitting 'c' then '?'. Below is what you will need to have the sidebar.

# Mailboxes to show in the sidebar.
mailboxes ="INBOX" ='[Gmail]/Drafts' ='[Gmail]/Sent Mail' ='label'
# Sidebar Patch --------------------------------------
set sidebar_delim = '│'
set sidebar_visible = yes
#set sidebar_width = 24
set sidebar_shortpath = yes
#Shortcuts
bind index CP sidebar-prev
bind index CN sidebar-next
bind index CO sidebar-open
macro index b 'toggle sidebar_visible'
macro pager b 'toggle sidebar_visible'
bind index B bounce-message

The first section defines the folders that will go into the sidebar, which gmail calls labels. Sublabels can also be added by using ='label/sublabel'. The second portion defines the look of the sidebar and the last portion defines the navigation shortcuts. Finally to enable gpg support do the following.

# GNUPG Config
source /home/user/.mutt/gpg.rc
set pgp_autosign = yes
# set pgp_replysignencrypt = yes
# set pgp_veryfy_sig = yes
set pgp_sign_as = gpg pub key

This will give a basic mutt interface with sidebar and gpg enabled. Now I want to share two addons that will really help enhance your experience in mutt.

goobook

Goobook is a simple utility that allows you to manage you gmail contacts from inside mutt. When it is time to compose a message just hit tab in the 'to:' field or just the begining of the name you want and hit tab. Goobook will present you a list of email addresses to choose from. The install of the package is pretty simple.

apt-get install goobook

Then create a .goobookrc file and add the following.

[default]
email: gmail account
password: password

Then run the command goobook authenticate to have gmail verify the tool has rights to manage you contacts. After you have authorized goobook then add the following to the muttrc file.

# Address book using goobook
set query_command="goobook query %s"
macro index,pager a "goobook add" "add sender to google contacts"
bind editor complete-query

urlview

This tool gives you the ability to open urls in messages with an external browser (ie luakit or w3m). The install is the same as the others.

apt-get install urlview

The config file is .urlview. Below is my setup.

#
# Sample urlview(1) configuration file
#

# regular expression to use to match URLs
REGEXP (((http|https|ftp|gopher)|mailto):(//)?[^ <>"\t]*|(www|ftp)[0-9]?\.[-a-z0-9.]+)[^ .,;\t\n\r<">\):]?[^, <>"\t]*[^ .,;\t\n\r<">\):]

# command to invoke for selected URL
# COMMAND /etc/urlview/url_handler.sh
COMMAND luakit %s

# set to yes to enable menu wrapping
#WRAP Yes

The key portion is here COMMAND luakit %s. Luakit can be replaced with any browser desired. Finally just add the following section to the muttrc file.

# View URLs inside Mutt
macro index \cb "|urlview\n"
macro pager \cb "|urlview\n"

When a message is opened hit CTRL+b and you will be given a list of urls to open. Just select one and the browser will open.

I hope this tutorial is helpful. I have my entire muttrc file hosted on github if anyone wants to see what I have set up. If you are for looking a fast flexable email client that will not slow down your PowerPC machine then I would seriously consider giving mutt a try.