Mutt is a terminal and CLI email client for sending, receiving, and reading email. It uses vim-like keybindings and has minimal requirements. If you want to use a GUI email client, try Thunderbird. You might also be interested in Neomutt.
Let's look at how to obtain, install, and configure Mutt for use.
You can download Mutt from http://www.mutt.org as a pre-built binary or as source code. Many Linux distributions will have a package for it already.
Install with package manager on Debian
sudo apt install mutt
Build from source
Here are the steps to build from source. You can download the sources from http://www.mutt.org.
wget ftp://ftp.mutt.org/pub/mutt/mutt-2.0.6.tar.gz tar xzf mutt-2.0.6.tar.gz cd mutt-2.0.6 ./configure --help | less # First check all options # Include any desired options ./configure --enable-smtp --enable-imap --with-ssl --enable-compressed \ --enable-sidebar --enable-autocrypt --with-sqlite3 --with-zlib --with-sasl make # The executable you need is now at `./mutt`. sudo make install # Optional
NOTE: If you're trying to build in MacOS and it says it can't find SSL, run:
brew install openssl export LDFLAGS="-L/usr/local/opt/openssl/lib" export CPPFLAGS="-I/usr/local/opt/openssl/include" # Then run ./configure with the options.
To see what flags were used when mutt was built, run mutt -v
and look for Configure options:
# See what build options mutt used mutt -v
Use the ~/.muttrc
file to configure things like:
For a list of all options, try running man muttrc
.
You can also set any of these values while you're already inside Mutt by running the commands like:
:set sort=reverse-last-date-received
Here is an example $HOME/.muttrc
file.
# ~/.muttrc # Identity set from = "john.doe@example.com" set realname = "John Doe" # Sending mail with SMTPS # TLS is `smtps://` and port 465 # non-TLS `smtp://` and port 25 or 587 set smtp_url = "smtps://nanodano@devdungeon.com@mail.devdungeon.com:465/" set smtp_pass = "password" # Receiving mail with IMAPS # TLS is `imaps://` with port 993 # non-TLS `imap://` with port 143 # Omit password, and it will prompt you set imap_user = "nanodano@devdungeon.com" set imap_pass = "password" set folder = "imaps://mail.devdungeon.com:993" set spoolfile = "+INBOX" # Automatically fetch mailbox folders from server set imap_check_subscribed = yes # Turn on sidebar showing folders set sidebar_visible = yes # Set editor when composing set editor = "vim" # Sorting # Default sort will put oldest emails at top `last-date-received` # Use `reverse-last-date-received` to have newest messages at top set sort = reverse-last-date-received # or try `set sort = threads` # Colors (general) color normal white default color status cyan default color indicator brightcyan default color tree magenta default color error brightred default color message brightmagenta default # Color headers color header brightyellow default "^from:" color header yellow default "^to:" color header yellow default "^cc:" color header blue default "^date:" color header brightblue default "^subject:" # Color bodies color attachment brightblack default color search red brightblack color signature cyan default color tilde blue default # Color URLs color body brightblue default "(^|<| )mailto:[^ ]+@[^ ]( |>|$)" color body brightblue default "(^|<| )(http|https|ftp)://[^ ]+( |>|$)" # Quoted emails color quoted magenta default color quoted1 cyan default color quoted2 green default color quoted3 magenta default color quoted4 cyan default color quoted5 green default color quoted6 magenta default color quoted7 cyan default
To get more information, try the man page, the '–help' option, and going into mutt and pressing the ?
key.
man mutt man muttrc mutt --help mutt # Go into mutt and press ?
You can compose an email message directly from CLI or from within Mutt.
To send email from within Mutt, simply press m
and it will begin composing a new mail. If you had any postponed mails (drafts) it will ask if you want to load those or start a new one.
To send email via the CLI, invoke mutt like this:
# Email nanodano mutt -s "Test Email" nanodano@devdungeon.com # Attach file with `-a` mutt -s "Test Attachment" nanodano@devdungeon.com -a file.zip
Assuming your ~/.muttrc
is configured with the proper IMAP server and credentials, all you have to do is open mutt
and it will automatically connect and pull your mail. When you open mutt
you'll be presented the list of emails. Use the vim keybinds to get around.
There are some letters that show up next to emails that represent different things like:
O
means the email has not been openedr
means the email has been replied toD
means the email is marked for deletionKeybinds:
?
to get help and a list of keybindsq
to quitj
and k
or up
and down
to move through the list of emailsright
and left
arrow keys will page down and upspace
or enter
to read the selected email from the listq
or i
to stop reading an email and go back to the list of emailsr
to replyd
to mark for deletion/
to open the search form; n
to keep finding next occurrences
To change sort order interactively, use :set sort=last-date-received
or :set sort=reverse-last-date-received
.
To check other folders besides your basic inbox, you can manually set the mailbox names in .muttrc
or you can have it automatically fetch all folders from the IMAP server. You can also show the sidebar to see what folder you're currently looking in.
# In your ~/.muttrc # To automatically fetch folders from IMAP server set imap_check_subscribed = yes # To manually set folders mailboxes =INBOX =INBOX.Sent =Inbox.Trash # It's also useful to show the sidebar set sidebar_visible = yes
To change what folder you're looking in, press the y
key.
One way to do this is have separate .muttrc
files for different accounts, and then specify the the rc file to use at runtime:
mutt -F ~/.muttrc.account2
If you want to include a generic rc file within your account specific file, use source
to load the other scripts source. For example:
# ~/.muttrc.account2 # Load generic colors/preferences source ~/.muttrc ### Account specific settings ### set from = "john.doe@example.com" set realname = "John Doe" set smtp_url = "smtps://nanodano@devdungeon.com@mail.devdungeon.com:465/" set smtp_pass = "password" # Omit password, and it will prompt you set imap_user = "nanodano@devdungeon.com" set imap_pass = "password" set folder = "imaps://mail.devdungeon.com:993" set spoolfile = "+INBOX"
I read that there is a way to map a key-bind to toggle switching between mailboxes like this but I'm not sure how. Press ?
in mutt to pull up the commands. Probably something like “load rc file” followed by “sync mailbox imap”.
You can also use the Dialog tool. Refer to the page: Dialog - Terminal Menu Creator, but here is a simple example:
#!/bin/bash # Present a list of accounts to choose from exit_code=0 exec 3>&1 # Go back to the menu after quitting mutt while [ $exit_code -eq 0 ] do # Generate a menu of accounts choice=$(dialog --menu "Open mail" 40 40 40 \ "~/.muttrc.1" "Account 1" \ "~/.muttrc.2" "Account 2" \ 2>&1 1>&3) exit_code=$? if [ $exit_code -eq 0 ] then mutt -F "$choice" fi done exec 3>&-
Incomplete. To Do.