posts:mutt: copy post over from Drexel Liki.
authorW. Trevor King <wking@tremily.us>
Wed, 4 Feb 2009 18:06:00 +0000 (13:06 -0500)
committerW. Trevor King <wking@tremily.us>
Fri, 14 Sep 2012 18:49:53 +0000 (14:49 -0400)
This is my

  http://www.physics.drexel.edu/liki/index.php?title=Mutt&oldid=2213

translated into Markdown.  I had been the only contributor to that
liki page at that point.

posts/Mutt.mdwn [new file with mode: 0644]

diff --git a/posts/Mutt.mdwn b/posts/Mutt.mdwn
new file mode 100644 (file)
index 0000000..2604086
--- /dev/null
@@ -0,0 +1,407 @@
+[[!meta  date="2009-02-04 13:06:00"]]
+
+[Mutt][] is a simple, configurable mail user agent [MUA][]/email
+client.  I got tired of using webmail to check my email, so I got Mutt
+set up on my computer instead.  Mutt is intended to be an email
+browser, so most versions don't have built in [[SMTP]] support.  For a
+simple setup, you can use an external SMTP client like [msmtp][],
+which is how we'll do it in the examples below.
+
+Install
+=======
+
+For Debian-type distros (e.g. Debian, Ubuntu, …), you can install Mutt
+and msmpt with
+
+  $ apt-get install mutt msmtp
+
+Configure
+=========
+
+You configure Mutt with the file `~/.muttrc`.  To set it up with the
+Drexel email system, I looked up the server addresses, and created the
+`.muttrc` file:
+
+    # login information
+    set imap_user='<your-username>@drexel.edu'
+    set imap_pass='<your-password>'
+    set from="<your-username>@drexel.edu"
+    set use_from=yes # required so msmtp knows which account to use to send mails
+
+    # setting your realname is optional, but drexel addresses can be cryptic...
+    set realname="<your-realname>"
+
+    # email server location
+    set spoolfile=imaps://<your-username>@imap.mail.drexel.edu:993/INBOX
+    set folder=imaps://<your-username>@imap.mail.drexel.edu:993/
+
+    # use msmtp for sending mail
+    set sendmail=/usr/bin/msmtp # Debian-style system path, yours may be different
+
+    # save copies of sent email to the ${folder}Sent directory
+    # the '+' expands to $folders (like '~' to $HOME in bash)
+    set record=+Sent
+
+    set mail_check=600 # check for new mail every 10 minutes when user is active
+    set timeout=600    # check for new mail every 10 min. when user is not active
+
+    set editor="/usr/bin/emacs -nw"   # use emacs for writing emails
+    set edit_headers                  # allow editing headers while you're in emacs
+
+Since this file contains your password, you should not allow other
+users to read it.
+
+    $ chmod 600 ~/.muttrc
+
+This still isn't terribly secure, so you could remove the password
+line entirely, in which case Mutt prompts you for it when it tries to
+log in (just like webmail does).
+
+The `mail_check` and `timeout` settings set up how often Mutt checks
+for new mail, which I've set to be pretty slow.  You can type `$` to
+sync, whenever you want to send outgoing mail or check for new mail.
+
+Googling `.muttrc` should turn up tons of other goodies, or try `man
+muttrc`.
+
+You also have to configure msmtp with a `~/.msmtprc` file:
+
+    account default
+         host smtp.mail.drexel.edu
+         from <your-username>@drexel.edu
+
+    # use STMP authentication
+         auth on
+         user <your-username>
+         password <your-password>
+
+    # use TLS encryption
+         tls on
+         tls_trust_file /etc/ssl/certs/ca-certificates.crt
+
+To find information on a given SMTP server from the command line, use
+
+    $ msmtp --host=smtp.some.domain --server-info
+
+The same security issues with plain text passwords apply to
+`.msmtprc`, so `chmod 600` it, or possibly remove your password
+information entirely.
+
+Usage
+=====
+
+There's list of basic shortcuts across the top of the Mutt screen.
+Most importantly, `?:Help`, which will give a list of all the current
+shortcuts.
+
+Tutorial
+========
+
+An excellent tutorial page is [my first mutt][mfm].
+
+Multiple accounts
+=================
+
+I finally had some time to play around and get Drexel mail and Gmail
+working at the same time.  The basic setup is the same as above, using
+msmtp to send the mail and Mutt's built in IMAP capability to get it
+from the servers.
+
+First configure msmtp with:
+
+    # ~/.msmtp
+    # Mostly from Peter Garrett's examples
+    #  https://lists.ubuntu.com/archives/ubuntu-users/2007-September/122698.html
+    # Accounts from Scott Robbins' `A Quick Guide to Mutt'
+    #  http://home.nyc.rr.com/computertaijutsu/mutt.html
+
+    account drexel
+         host smtp.mail.drexel.edu
+         from <drexel-from-address>@drexel.edu
+         auth on
+         user <drexel-username>
+         password <drexel-password>
+         tls on
+         #tls_trust_file /etc/ssl/certs/ca-certificates.crt
+         tls_trust_file /etc/pki/tls/cert.pem
+
+    account gmail
+         host smtp.gmail.com
+         from <gmail-from-address>@gmail.com
+         user <gmail-from-address>@gmail.com
+         password <gmail password>
+         port 587
+         auth on
+         tls on
+         tls_trust_file /etc/pki/tls/cert.pem
+
+    account default : drexel
+
+This sets msmtp up so it can connect to either mail
+server. `<drexel-username>` is your username (`abc123`),
+`<drexel-from-address>` can be the same as `<drexel-username>`, but
+you can use any address you've set up as an alias.
+`<gmail-from-address>@gmail.com` is your full gmail email address. The
+`tls_trust_file` line depends on your distribution.  For Debian-based
+distributions, use the `ca-certificates.crt` line; and for Red
+Hat-based distributions, use the `cert.pem` line.  I don't know where
+the certificate information is stored for other distributions, but
+googling about should find it.
+
+Then configure mutt with
+
+    # ~/.muttrc
+
+    mailboxes imaps://<drexel-username>@imap.mail.drexel.edu imaps://<gmail-username>@gmail.com@imap.gmail.com
+
+    source ~/.mutt/common
+    source ~/.mutt/drexel
+
+    # from http://wiki.mutt.org/?MuttGuide/UseIMAP
+    # account-hook to set up connection parameters (username, password, etc.)
+    # and folder hook for everything else.
+    account-hook . 'set imap_user=<drexel-username>@drexel.edu imap_pass="<drexel-password>"'
+    account-hook imaps://<drexel-username>@imap.mail.drexel.edu \
+            'set imap_user=<drexel-username>@drexel.edu imap_pass="<drexel-password>"'
+    account-hook imaps://<gmail-username>@gmail.com@imap.gmail.com \
+            'set imap_user=<gmail-username>@gmail.com imap_pass="<gmail-password>"'
+    folder-hook imaps://<drexel-username>@imap.mail.drexel.edu 'source ~/.mutt/drexel'
+    folder-hook imaps://<gmail-username>@gmail.com@imap.gmail.com 'source ~/.mutt/gmail'
+
+    # switch FROM field so msmtp changes sending account
+    # http://home.nyc.rr.com/computertaijutsu/mutt.html
+    macro generic "<esc>1" ":set from='<drexel-from-address>@drexel.edu'"
+    macro generic "<esc>2" ":set from='<gmail-username>@gmail.com'"
+    # no send2-hook in version 1.4.2.2i
+    send-hook '~f <drexel-from-address>@drexel.edu' 'set sendmail="/usr/local/bin/msmtp "'
+    send-hook '~f <gmail-username>@gmail.com' 'set sendmail="/usr/local/bin/msmtp -a gmail"'
+    #send-hook '~f <drexel-from-address>@drexel.edu' 'set sendmail="/usr/bin/msmtp "'
+    #send-hook '~f <gmail-username>@gmail.com' 'set sendmail="/usr/bin/msmtp -a gmail"'
+
+    set use_from=yes # required so msmtp knows which account to use to send mails
+
+This sets up your two mailboxes (drexel and gmail) where you can
+recieve mail.  It also sets up methods for switching between the two
+accounts.  To ease in configuring the two accounts, we split most of
+the configuration details into `~/.mutt/common`, `~/.mutt/drexel`, and
+`~/.mutt/gmail`.  Sourcing common brings in some configuration
+commands shared by both accounts.  The `drexel` and `gmail` files
+contain account-specific configuration commands.  All the password
+information is in `.muttrc` and `.msmtprc` though, so be sure to
+`chmod 600` them.  Make sure you get the path to `msmtp` right for
+your system (`which msmtp` should find it).
+
+Note that I removed the `folder-hook . 'source ~/.mutt/drexel'` line
+that had been in my previous version.  This line was stupid and
+switched back to my drexel settings whenever I left my Gmail inbox
+(say for my Gmail `Sent Mail` box).  Without it, Mutt has been
+behaving much more intuitively.
+
+The specific configuration files are:
+
+The common configuration (these are all optional).
+
+    #~/.mutt/common
+    set realname="<your-realname>"
+
+    set move=no       # stop asking to "move read messages to mbox"
+
+    set mail_check=600 # check for new mail every 10 minutes when user is active
+    set timeout=600   # check for new mail every 10 minutes when user is not active
+
+    set editor="/usr/bin/emacs -nw"    # use emacs as the editor
+    set edit_headers                   # editable headers
+
+The Drexel setup
+
+    #~/.mutt/drexel
+    # Drexel information
+
+    # Drexel mail server addresses from
+    #  http://www.drexel.edu/IRT/support/ConfigureEmail.html
+    # email server location
+    set spoolfile=imaps://<drexel-username>@imap.mail.drexel.edu:993/INBOX
+    set folder=imaps://<drexel-username>@imap.mail.drexel.edu:993/
+
+    # save copies of sent emails to the ${folder}Sent directory
+    # the '+' expands to $folders (like '~' to $HOME in the bash shell)
+    set record=+Sent
+
+    # use msmtp to send outgoing mail to the mailserver
+    # see ~/.msmtp for configuration
+    set sendmail=/usr/local/bin/msmtp
+
+    set from="<drexel-from-address>@drexel.edu"
+
+And the Gmail setup
+
+    # Gmail information
+
+    # Gmail mail server addresses from
+    #  http://mail.google.com/support/bin/answer.py?answer=78799
+    # email server location
+    set spoolfile=imaps://<gmail-username>@gmail.com@imap.gmail.com:993/INBOX
+    set folder=imaps://<gmail-username>@gmail.com@imap.gmail.com:993/
+
+    # gmail does this automatically
+    unset record
+
+    # use msmtp to send outgoing mail to the mailserver
+    # see ~/.msmtp for configuration
+    set sendmail="/usr/local/bin/msmtp -a gmail"
+
+    set from="<gmail-username>@gmail.com"
+
+Firing up `mutt` takes you to your Drexel inbox like you're used to.
+You can change directories like your used to with `c`.  You switch
+accounts with `c TAB TAB`.  The first tab lists all the mailboxes in
+your Drexel account, and the second lists all of your available
+accounts (mailboxes).
+
+Strangely (I haven't figured out why yet), `c TAB` from gmail also
+lists the *drexel* directories.  No problem though, you can get a list
+of gmail directories with `c +TAB TAB TAB` from gmail (I also don't
+understand what the second `TAB` does).
+
+Anyhow, that should get people started.
+
+POP
+===
+
+I just added my Comcast email account (a necessary administrative
+evil) to the above configuration.  Comcast doesn't supply an [[IMAP]]
+interface, so we're forced to fall back on [[POP]].  Luckily, that
+doesn't change much of the configuration, which consisted of creating
+a `.mutt/comcast` file:
+
+    # Comcast information
+
+    # Comcast mail server addresses from
+    #  http://www.comcast.com/customers/faq/FaqDetails.ashx?Id=2165
+    # Ports from
+    #  http://www.comcast.com/customers/faq/FaqDetails.ashx?ID=2288
+    # email server location
+    set spoolfile=pops://<comcast-username>@mail.comcast.net:110/INBOX
+    set folder=pops://<comcast-username>@mail.comcast.net:110/
+
+    # gmail does this automatically
+    unset record
+
+    # use msmtp to send outgoing mail to the mailserver
+    # see ~/.msmtp for configuration
+    set sendmail="/usr/local/bin/msmtp -a gmail"
+
+    set from="<gmail-username>@gmail.com"
+
+    set nopop_delete
+    set pop_checkinterval="600"
+
+Where the gmail stuff is because I'm sending mail using Gmail when I'm
+looking at my Comcast account.  This avoids using Comcast as much as
+possible ;).  Note that `<comcast-username>` is everything before the
+`@` in your Comcast email address.
+
+I then adjust my `.muttrc` file by adding Comcast to my list of
+mailboxes:
+
+    mailboxes imaps://<drexel-username>@imap.mail.drexel.edu imaps://<gmail-username>@gmail.com@imap.gmail.com pops://<comcast-username>@mail.comcast.net
+
+in a single long line. I also added account and folder hooks:
+
+    account-hook pops://<comcast-username>@mail.comcast.net \
+            'set pop_user=<comcast-username> pop_pass="<comcast-password>"'
+    folder-hook imaps://<comcast-username>@imap.comcast.net 'source ~/.mutt/comcast'
+
+And that seems to handle it…
+
+PGP
+===
+
+[[PGP]] is a encryption and authentication system often used for
+protecting email.  The [[GnuPG]] implementation can be used with Mutt
+to send secure, authenticated emails between capable parties.
+
+Once you've got a key set up, determine the key ID for your pair with
+
+    $ gpg --list-keys --keyid-format 0xlong
+    /home/user/.gnupg/pubring.gpg
+    -----------------------------
+    pub   1024D/0xFC29BDCDF15F5BE8 2008-08-09 [expires: 2009-08-09]
+    …
+
+Where `0xFC29BDCDF15F5BE8` is my long key ID (I don't understand the
+difference between the long and short keys, but I figure the longer
+one must be more specific, and since I only have to enter it once for
+Mutt, I chose the longer key.)
+
+Then, tell Mutt how to use `gpg`, adding
+
+    source ~/.mutt/pgp
+
+to your `.muttrc` file and creating `~/.mutt/pgp` as follows
+(replacing my key ID with your own)
+
+    # from Justin R. Miller's
+    # `Everything You Need To Know To Start Using GnuPG with Mutt'
+    # http://codesorcery.net/old/mutt/mutt-gnupg-howto
+
+    set pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"
+    set pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"
+    set pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"
+    set pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"
+    set pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"
+    set pgp_encrypt_only_command="/usr/lib/mutt/pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0xFC29BDCDF15F5BE8 -- -r %r -- %f"
+    set pgp_encrypt_sign_command="/usr/lib/mutt/pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0xFC29BDCDF15F5BE8 -- -r %r -- %f"
+    set pgp_import_command="gpg --no-verbose --import -v %f"
+    set pgp_export_command="gpg --no-verbose --export --armor %r"
+    set pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"
+    set pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r"
+    set pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r"
+    set pgp_autosign=yes
+    set pgp_sign_as=0xFC29BDCDF15F5BE8
+    set pgp_replyencrypt=yes
+    set pgp_timeout=1800
+    set pgp_good_sign="^gpg: Good signature from"
+
+The above file autosigns all your sent emails (`set
+pgp_autosign=yes`), but you can obviously turn that off if you would
+like.  To change signing/encryption on an email, use the `p` key from
+the compose view (the screen shown after you have finished editing a
+new e-mail; thank, you [Chad Perrin][compose-view-p]).
+
+Browsing email with links
+=========================
+
+Usually mutt is pretty good about handling HTML in emails.  When you
+get emails that are obviously HTML, `v` will take you to the
+attachment list (which should show the email as type `text/html`), and
+enter will open the email in your browser ([[w3m]], right?).
+
+Sometimes you get `text/plain` emails with URLs in them, or maybe the
+above procedure just isn't working.  In that case, add
+
+    macro pager \cb <pipe-entry>'w3m'<enter> 'Follow links in w3m'
+
+somewhere in your mutt configuration files (thank you, [Bruno
+Postle][links]).  Then pressing `Ctrl-b` will pipe the email you're
+looking at into w3m.  Pressing `:` in w3m will scan the document for
+URL-like strings and make them browsable.
+
+Folder size in status bar
+=========================
+
+Add the folder size to the status bar by adding `%l` or `%L` to
+`status_format` in your `~/.muttrc` file.  For example
+
+    set status_format="-%r-Mutt: %f %L"
+
+
+[Mutt]: http://www.mutt.org/
+[MUA]: http://en.wikipedia.org/wiki/Email_client
+[msmtp]: http://msmtp.sourceforge.net/
+[mfm]: http://mutt.blackfish.org.uk/
+[GnuPG]: http://www.gnupg.org/
+[compose-view-p]: http://blogs.techrepublic.com.com/security/?p=413
+[links]: http://mutt.blackfish.org.uk/following-links/
+
+[[!tag tags/tools]]