These notes describe IMAP facilities present in mutt 1.4 and later.

1. Getting started

1.1. How to write an IMAP mailbox in mutt

To point mutt to an IMAP mailbox, write your mailbox in IMAP URL format:
imap://hostname/mailbox
where hostname is the name of your IMAP server, and mailbox is the name of your mailbox on the server. All IMAP servers provide one special folder called INBOX, which is where your incoming mail normally arrives. For example, if your IMAP server is mailhost.mydomain.com, you could open your INBOX there by telling mutt to open imap://mailhost.mydomain.com/INBOX

If necessary, you can also specify the port your IMAP server listens on, and ask mutt to use ssl if available. The full form of an IMAP mailbox in mutt is

imap[s]://[user@]hostname[:port]/mailbox
Mutt also understands PINE-compatible IMAP mailbox notation:
{[user@]hostname[:port][/ssl]}mailbox

1.1.1. What about the mailbox part?

How you write the actually mailbox name may depend on your IMAP server. First, some servers will put all of your mail into a subfolder, often a subfolder of INBOX. For instance, if your server is Courier or Cyrus, your folder Lists may actually be INBOX.Lists. This brings us to point number two: some servers don't use '/' to separate folder names. The reference server (UW-IMAP) uses '/', but two common servers (Courier and Cyrus) both generally use '.', and Lotus Notes has a server which uses '\' (a very bad choice, by the way). Generally you can use '/' and mutt will figure out what to do with it, though. Some examples:
imap://hostname/lists/mutt-dev
imap://hostname/INBOX.lists.mutt-dev
When mutt has proper namespace support, you will hopefully no longer have to worry about either of these issues.

1.2. Connecting to your IMAP server

To connect to your IMAP server, just switch to an IMAP mailbox. That is, press c to get the Open mailbox: prompt, and enter an IMAP mailbox as described above. You'll need your IMAP user name and password. You may set these in advance via configuration the variables imap_user and imap_pass. If you haven't set them, mutt will prompt you for this information when you first connect to your server.

1.2.1. Connection security

Mutt has advanced support for IMAP session security - probably as advanced as any other IMAP client, and more than most.

1.2.1.1. SSL/TLS

To use SSL, specify your IMAP mailbox starting with imaps: instead of imap:. Mutt also supports TLS, which means that if your server does too, you can negotiate SSL over a normal IMAP connection (using imap:). Whether or not this happens depends on the mutt quadoption ssl_starttls, which defaults to ask-yes, meaning that if, and only if, the server supports TLS, mutt will ask you whether it should encrypt the connection before authenticating.

Each time you connect to an IMAP server using SSL, mutt will check the server's certificate against its list of known-good certificates, if available. These certificates are stored in the file pointed to by the configuration variable certificate_file, which is unset by default. If mutt cannot find the server certificate in this file, the certificate will be displayed to you and you must decide whether to accept it or reject it (and if you accept it and have a certificate_file set, whether or not to save it permanently). If you reject the certificate your connection will be terminated. Note you may also place a signing certificate into this file, in which case mutt will automatically accept any certificate which has been signed by it.

Some servers do not fully support all SSL protocols, and may disconnect you during connection if mutt tries to use one they do not understand. You can disable certain protocols by unsetting one or more of the configuration variables ssl_use_sslv2, ssl_use_sslv3, or ssl_use_tlsv1.

For more information, see the README.SSL file included in the mutt distribution.

1.2.1.2. Authentication methods

Mutt supports several ways to authenticate to your IMAP server, including plain-old login, CRAM-MD5 (in which the server issues a one-time challeng string which you hash with your password and then send back. The server also hashes the string with your password and compares the result), and GSSAPI, which is Kerberos V authentication. Additionally mutt supports authentication using the Cyrus SASL library, and can even encrypt your session when using SASL, if the particular method being used supports it.

Mutt will generally pick the best available authentication method, but you may override its selection by setting the imap_authenticators configuration variable. This is a colon-delimited list of methods mutt may try, in the order it should try them. If any of these methods are available but fail, or none of them are available, mutt will fail to authenticate. For example, if you only want to use GSSAPI to authenticate, you could

set imap_authenticators="gssapi"
in which case mutt will only try gssapi, and if that fails or is unavailable (either because the server doesn't support it or you have no ticket-granting ticket), mutt will not log you in. Or you could try something like
set imap_authenticators="digest-md5:cram-md5"
in which case mutt would attempt DIGEST-MD5 if your SASL library and the server support it, otherwise CRAM-MD5.

1.2.1.3. Using a tunnel to your IMAP server

If you set the configuration variable tunnel, mutt will attempt to run it as a shell command and treat the process as a pipe to an IMAP server, instead of connecting through a normal network socket. Note that the hostname, port and SSL options are ignored when tunnel is set, they are used only to display the mailbox name.

Also note that your tunnel command has no way to interact with the terminal, so it can't, for example, ask you for a password. If you try to use an SSH tunnel with something like

set tunnel="ssh -q mailhost /usr/libexec/imapd"
you'd better make sure that you don't need a password, probably by using ssh-agent. Otherwise you are likely to get a "Broken pipe" error when SSH dies.

1.2.1.4. Running a shell command before connecting

If you set the configuration variable preconnect, mutt will attempt to run it as a shell command before connecting to your IMAP server. You can use this feature to set up SSH port forwarding between your computer and the IMAP server. For example, if you
set preconnect="ssh -f -q -L 1234:mailhost:143 mailhost sleep 5"
then an IMAP folder of imap://localhost:1234/ can be used to access imap://mailhost/ over a secure SSH connection.

1.3. Using an IMAP server instead of local mail

  1. Tell mutt to use your IMAP INBOX as your $spoolfile: set spoolfile=imap://hostname/INBOX
  2. Set your $folder to your IMAP root: set folder=imap://hostname/

1.3.1. Polling for new mail

This works the same as normal mail, with a couple of caveats. You add mailboxes you'd like to check for mail using the mailboxes command. If you've set your folder as above, you can do
mailboxes =lists/mutt-dev =lists/mutt-users
to poll for mail in imap://hostname/lists/mutt-dev and imap://hostname/lists/mutt-users.

The caveats:

Brendan Cully