There are a vast number of mail clients available to choose from for our everyday usage. But as Michael Elkins said, all mail clients suck. So there must be some way we could make one of those suckers suck less.
Most mail clients are GUI based. But I am going to talk about command line mail clients, and specifically about mutt, because this one sucks less, and that’s what I use. But to use mutt, you should also know how to use a Mail Transport Agent (MTA) and a Mail Delivery Agent (MDA). For MTA, what we will be seeing here is fetchmail and the MDA will be procmail. We will look at configuring, minimilistically, and running the programs, which will just satisfy your basic needs, and scratches your itches to do more ;-)
How is this going to work
- Enable mail server to accept POP connections
- Configure local workstation to contact mail server and fetch mails
- Configure a Local Mail Delivery Agent to deliver it to you
- Optionally configure the MDA to deliver mails in the way you prefer.
Configuring email to be delivered to your mail spooler
The first step to start using a CLI based Mail User Agent (MUA), mutt, is to
somehow bring in all your mails to
/var/spool/mail/you. This part is done by
fetchmail, and opensource, free MTA.
Here is a dummy configuration:
poll pop.gmail.com with proto POP3 and options no dns user 'email@example.com' there with password 'password' is 'password' here options ssl flush
What this says to fetchmail is that, poll the gmail server with protocol pop3 for the user firstname.lastname@example.org whose password is “password”, and do everything securely over Secure Socket Layer (SSL).
Once you change this to your needs and put them into
.fetchmailrc, just run
fetchmail -c and check for any errors. If there are no errors, you will know
about new mails in the server. New mails? No rush to check it in the web site,
just wait, we are almost done.
Now lets put this fetchmail command in cron so we don’t have to check mail manually.
$ crontab -e */10 * * * * fetchmail >/dev/null 2>&1
The redirection to
/dev/null is to stop
cron sending us mails every 10
After the first run, check your mail with
- The configuration might be incorrect
- Make sure fetchmail in cron has run or you run it without the
- Check you have enabled pop support for the mail address (In case of gmail,
Yes, this is it! you have started using command line for reading mails!!
The first step is a good step, but the reading mails through mail is not very interesting, the UI is not very friendly. So you just open mutt from your command line. This would have a nice interface, atleast better than mail.
Oh! you need filters? You have using filters in thunderbird heavily? mm.. then we should learn some more configurations, and this is for procmail.
Making your MDA deliver mails the way you want it
I hope you got the terms.
- is a MTA since it gets mail from the mail server to your local workstation
- is a MDA since it just delivers the mail to you in a way you want it
The mail fetched by fetchmail which would be in
/var/spool/mail/you is a single
file containing all the mails you have received. Now you want then to be
filtered out and put into separate files. This is where
procmail comes in. The
below configuration is for
LINEBUF=4096 VERBOSE=off MAILDIR=$HOME/Mail DEFAULT=$MAILDIR/INBOX FORMAIL=/usr/bin/formail SENDMAIL=/usr/sbin/sendmail PMDIR=$HOME/.procmail LOGFILE=$PMDIR/log INCLUDERC=$PMDIR/rc.maillists
In the above I have used a directory called Mail to hold all my mails. My mail
filter rules are present in
rc.maillists file inside
.procmail directory in my
home. So the
.procmail/rc.maillists file contains the following filter.
:0: * ^TO_ilugc@ae.iitm.ac.in lug :0: * ^TO_kernelnewbies@nl.linux.org kernel :0: * ^TO_kernelemail@example.com kernel :0: * ^TO_linuxcprogramming@lists.linux.org.au programming :0: * ^TO_linuxfirstname.lastname@example.org programming
I have created some rules which puts mails form specific mailing lists to its own file in my Mail directory. The DEFAULT variable makes sure that procmail puts all the rest of the mails in the INBOX file. For more information on the procmail rules see http://www.procmail.org/ or the procmailex man page.
And finally configuring the mail client itself. This is all about personal
preference, the colors, the key bindings etc. The
.muttrc file itself can be
built using http://www.muttrcbuilder.org/.