Mutt
From ArchWiki
Dansk – Deutsch – English – Español – Français – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Polski – Português – Română – Slovenský – Suomi – Svenska – Türkçe – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어
Mutt is a text-based mail client renowned for its powerful features. Mutt, though over a decade old, remains the mail client of choice for great number of power-users. Unfortunately, a default Mutt install is plagued by complex keybindings along a daunting amount of documentation. This guide will help the average user get Mutt up and running, and begin customizing as deemed fit.
Contents |
Overview
Mutt focuses on being a Mail User Agent (MUA), and was originally written to only view mail. Because of this, later implemented mail retrieval, sending and filtering features are basic compared to other applications. Most Mutt setups rely on external programs to do those tasks.
In any case, the Arch mutt package has been compiled with IMAP, POP3 and SMTP support, and thus does not need external programs to deal with mail.
This article will cover using both native IMAP mail sending/retrival, and a setup depending on OfflineIMAP or getmail (POP3) to retrieve mail, procmail to filter it in the case of POP3, and msmtp to send it.
Installing
Install Mutt:
# pacman -S mutt
Optionally install external helper applications for an IMAP setup:
# pacman -S offlineimap msmtp
Or if using POP3:
# pacman -S getmail procmail
Notes
- If you just need the authentication methods LOGIN and PLAIN, these are satisfied with the dependency libsasl.
- If you want to (or have to) use CRAM-MD5, GSSAPI or DIGEST-MD5, install also the package cyrus-sasl-plugins, and you're done.
- if you are using Gmail as your smtp server, you may need to install the package cyrus-sasl.
Configuring
This section covers IMAP, #POP3, #MailDir and #SMTP configuration.
Note that Mutt will recognize two locations for its configuration file; ~/.muttrc and ~/.mutt/muttrc. Either location will work.
IMAP
Native and external setups
Using native IMAP support
The pacman version of Mutt is compiled with IMAP support. At the very least you need to have 4 lines in your muttrc file to be able to access your mail.
spoolfile
Instead of a local mail spool, specify imap server.
set spoolfile=imap[s]://imap.server.domain[:port]/folder
Use imaps for SSL encryption or imap for no encryption. The port number is only needed when your server's port is non-standard. End with the folder name where new mail arrives, which is almost always INBOX. For example:
set spoolfile=imaps://imap.gmail.com/INBOX
imap_user
set imap_user=USERNAME
Continuing with the previous example, remember that gmail requires your full email address (this is not standard):
set imap_user=your.username@gmail.com
folder
Instead of a local directory which contains all your mail (and directories), use your server (and the highest folder in the hierarchy, if needed).
set folder=imap[s]://imap.server.domain[:port]/[folder/]
You don't have to use a folder, but it might be convenient if you have all your other folders inside your INBOX, for example. Whatever you set here as your folder can be accessed later in Mutt with just an equal sign (=). Example:
set folder=imaps://imap.gmail.com/
mailboxes
Any imap folders that should be checked regularly for new mail should be listed here (all on the same line).
mailboxes <list of folders>
You can now use '=' or '+' as a substitution for the full folder path that was configured above. For example:
mailboxes =INBOX =family mailboxes imaps://imap.gmail.com/INBOX imaps://imap.gmail.com/family
These two versions are equivalent, but the first is much more convenient. Also, Mutt is configured by default to include a macro bound to the 'y' key which will allow you to change to any of the folders listed under mailboxes.
Summary
Using these options, you'll be able to start mutt, enter your IMAP password, and start reading your mail. Here is a muttrc snippet (for Gmail) with some other lines you might consider adding for better IMAP support.
set folder = imaps://imap.gmail.com/ set spoolfile = imaps://imap.gmail.com/INBOX set imap_user = your.username@gmail.com set imap_pass = your-imap-password mailboxes = +INBOX # store message headers locally to speed things up set header_cache = ~/.mutt/hcache # specify where to save and/or look for postponed messages set postponed = +[Gmail]/Drafts # allow mutt to open new imap connection automatically set imap_passive = no # keep imap connection alive by polling intermittently (time in seconds) set imap_keepalive = 300 # how often to check for new mail (time in seconds) set mail_check = 120
External IMAP support
While IMAP-functionality is built into Mutt, it does not download mail for offline-use. The OfflineIMAP article describes how to download your emails to a local folder which can then be processed by Mutt.
Consider using applications such as spamassassin or imapfilter to sort mail.
POP3
Retrieving and sorting mail with external applications
Retrieving mail
Create the directory ~/.getmail/. Open the file ~/.getmail/getmailrc in your favorite text editor.
Here is an example getmailrc used with a gmail account.
[retriever] type = SimplePOP3SSLRetriever server = pop.gmail.com username = username@gmail.com port = 995 password = password [destination] type = Maildir path = ~/mail/
You can tweak this to your POP3 service's specification.
For this guide we will be storing our mail in the maildir format. The two main mailbox formats are mbox and maildir. The main difference between the two is that mbox is one file, with all of your mails and their headers stored in it, whereas a maildir is a directory tree. Each mail is its own file, which will often speed things up.
A maildir is just a folder with the folders cur, new and tmp in it.
mkdir -p ~/mail/{cur,new,tmp}
Now, run getmail. If it works fine, you can create a cronjob for getmail to run every n hours/minutes. Type crontab -e to edit cronjobs, and enter the following:
*/30 * * * * /usr/bin/getmail
That will run getmail every 30 minutes.
Sorting mail
Procmail is an extremely powerful sorting tool. For the purposes of this wiki, we will do some primitive sorting to get started.
You must edit your getmailrc to pass retrieved mail to procmail:
[destination] type = MDA_external path = /usr/bin/procmail
Now, open up .procmailrc in your favorite editor. The following will sort all mail from the happy-kangaroos mailing list, and all mail from your lovey-dovey friend in their own maildirs.
MAILDIR=$HOME/mail DEFAULT=$MAILDIR/inbox/ LOGFILE=$MAILDIR/log :0: * ^To: happy-kangaroos@nicehost.com happy-kangaroos/ :0: * ^From: loveydovey@iheartyou.net lovey-dovey/
After you've saved your .procmailrc, run getmail and see if procmail succeeds in sorting your mail into the appropriate directories.
Note: One easy to make mistake with .procmailrc is the permission. procmail require it to have permission 644 and won't give meaningless error message if you don't.
MailDir
MailDir is a generic and standardized format. Almost every MUA is able to handle MailDirs and Mutt's support is excellent. There are just a few simple things that you need to do to get Mutt to use them. Open your muttrc with and add the following lines:
set mbox_type=Maildir set folder=$HOME/Mail set spoolfile=+/INBOX set header_cache=~/.hcache
This is a minimal Configuration that enables you to access your Maildir and checks for new local Mails in INBOX. This configuration also caches the headers of the eMails to speed up directory-listings. It might not be enabled in your build (but it sure is in the Arch-Package) Note that this does not affect OfflineIMAP in any way. It always syncs the all directories on a Server. spoolfile tells Mutt which local directories to poll for new Mail. You might want to add more Spoolfiles (for example the Directories of Mailing-Lists) and maybe other things. But this is subject to the Mutt manual and beyond the scope of this document.
SMTP
Whether you use POP or IMAP to receive mail you will probably still send mail using SMTP.
Using native SMTP support
The pacman version of Mutt is also compiled with SMTP support. Just check the online manual muttrc, or man muttrc for more information.
For example:
set my_pass='mysecretpass' set my_user=myname@gmail.com set smtp_url=smtps://$my_user:$my_pass@smtp.gmail.com set ssl_force_tls = yes
External SMTP support
An external SMTP agenta such as msmtp or SSMTP can also be used. This section exclusively covers configuring Mutt for msmtp.
Edit Mutt's configuration file or create it if unpresent:
set realname='Disgruntled Kangaroo' set sendmail="/usr/bin/msmtp" set edit_headers=yes set folder=~/mail set mbox=+mbox set spoolfile=+inbox set record=+sent set postponed=+drafts set mbox_type=Maildir mailboxes +inbox +lovey-dovey +happy-kangaroos
Now, startup mutt:
$ mutt
You should see all the mail in ~/mail/inbox. Press m to compose mail; it will use the editor defined by your EDITOR environment variable. If this variable is not set, type:
$ export EDITOR=editorbin
For testing purposes, address the letter to yourself. After you have written the letter, save and exit the editor. You will return to Mutt, which will now show information about your e-mail. Press y to send it.
Customizing
Guides to get you started with using & customizing Mutt :
- My first mutt (maintained by Bruno Postle)
- The Woodnotes Guide to the Mutt Email Client (maintained by Randall Wood)
If you have any Mutt specific questions, feel free to ask in the irc channel.
Printing
You can install muttprint from the AUR for a fancier printing quality. In your muttrc file, insert:
set print_command="/usr/bin/muttprint %s -p {PrinterName}"
Signature block
Create a .signature in your home directory. Your signature will be appended at the end of your email.
Viewing URLs & opening Firefox
Your should start by creating a .mutt directory in $HOME if not done yet. There, create a file named macros. Insert the following:
macro pager \cb <pipe-entry>'urlview'<enter> 'Follow links with urlview'
Then install urlview with:
pacman -S urlview
Create a .urlview in $HOME and insert the following:
REGEXP (((http|https|ftp|gopher)|mailto)[.:][^ >"\t]*|www\.[-a-z0-9.]+)[^ .,;\t>">\):] COMMAND firefox %s
When you read an email on the pager, hitting ctrl+b will list all the urls from the email. Navigate up or down with arrow keys and hit enter on the desired url. Firefox will start and go to the selected site.
- Note - urlview has been moved to unsupported and is available in AUR here[1]
- Note - If you have some problems with urlview due to Mutt's url encoding you can try extract_url.pl
Mutt and Vim
- To limit the width of text to 72 characters, edit your .vimrc file and add:
au BufRead /tmp/mutt-* set tw=72
- Another choice is to use Vim's mail filetype plugin to enable other mail-centric options besides 72 character width. Edit ~/.vim/filetype.vim, creating it if unpresent, and add:
augroup filetypedetect " Mail autocmd BufRead,BufNewFile *mutt-* setfiletype mail augroup END
- To set a different tmp directory, e.g. ~/.tmp, add a line to your muttrc as follows:
set tmpdir="~/.tmp"
- To reformat a modified text see the Vim context help
:h 10.7
Viewing HTML within a Vim/Mutt setup
This setup will pass the html body to lynx and then dump it in Vim, keeping email viewing uniform and unobtrusive.
Install lynx:
pacman -S lynx
If ~/.mutt/mailcap does not exist you will need to create it and save the following to it.
text/html; lynx -dump %s; nametemplate=%s.html; copiousoutput
Edit muttrc and add the following,
set mailcap_path = ~/.mutt/mailcap
The beauty of this is, instead of seeing an html body as source or being opened by a seperate program, in this case lynx, it gets parsed to Vim as html, any url links within the email can be displayed with Ctrl+b.
Mutt and GNU nano
nano is another nice console editor to use with Mutt.
To limit the width of text to 72 characters, edit your .nanorc file and add:
set fill 72
Also, in muttrc file, you can specify the line to start editing so that you will skip the mail header:
set editor="nano +7"