MH-E can display messages that have been sent in HTML1. The
content of the message will appear in the MH-Show buffer as you would
expect if the entire message is HTML, or there is an inline HTML body
part. However, if there is an HTML body part that is an attachment,
then you'll see a button like this:
[1. text/html; foo.html]...
To see how to read the contents of this body part, see Viewing Attachments.
The browser that MH-E uses is determined by the option
mm-text-html-renderer. The default setting is set automatically
based upon the presence of a known browser on your system. If you wish
to use a different browser, then set this option accordingly. See the
documentation for the browser you use for additional information on
how to use it. In particular, find and disable the option to render
images as this can tip off spammers that the email address they have
used is valid.
If you're confused about which
mm-text-html-renderer to use,
here's a brief description of each, sorted by popularity, that
includes the results of a quick poll of MH-E users from 2005-12-23.
- ‘w3m’ 7
- The ‘w3m’ browser requires an external program. It's quick,
produces pretty nice output, and best of all, it's the only browser
that highlights links. These can be clicked with Mouse-2 to view
the content of the link in ‘w3m’. The ‘w3m’ browser handles
tables well and actually respects the table's width parameter (which
can cause text to wrap if the author didn't anticipate that the page
would be viewed in Emacs).
- ‘w3m-standalone’ 3
- This browser, along with ‘nil’ for the external browser, are the
only choices that work without having to download a separate lisp
package or external program. This browser is quick, but does not show
links. It handles simple tables but some tables get rendered much
wider than the Emacs frame. This browser was the only one not to
handle the escape ‘–’ (it printed a ‘?’), but it did
- ‘links’ 1
- The ‘links’ browser requires an external program. It's quick, and
produces nicer output than ‘lynx’ on single column mails in
tables. However, it doesn't show links and it doesn't do as nice a job
on multi-column tables as some lines wrap. At least it fits in 80
columns and thus seems better than ‘w3’ and
‘w3m-standalone’. Converts escapes such as ‘®’ to (R).
- ‘lynx’ 1
- The ‘lynx’ browser requires an external program. It's quick and
produces pretty decent output but it doesn't show links. It doesn't
seem to do multi-column tables which makes output much cleaner. It
centers the output and wraps long lines more than most. Handles
- ‘nil’ 1
- This choice obviously requires an external browser. Like
‘w3m-standalone’, it works out of the box. With this setting,
HTML messages have a button for the body part which you can view with
K v (
- ‘w3’ 0
- This choice does not require an external program as all of the
rendering is done in lisp. You do need to get the package separately.
This browser is slow, and doesn't appear to have been updated
since 2001 and the author hasn't responded to my emails. It displays
unknown tags instead of hiding them, so you get to see all the
Microsoft crap in certain messages. Tends to make multi-column tables
wider than even a full-screen Emacs can handle. Like ‘w3m’, you
can follow links, but you have to find them first as they are not
highlighted. Performs well on single-column tables and handles escapes
such as ‘®’.
- ‘html2text’ 0
- The ‘html2text’ browser requires an external program. I noticed
that it can do some nasty things with simple HTML mails (like filling
the entire message as if it were one paragraph, including signature).
On another message, it displayed half of the HTML tags for some
For a couple more sources of information about
see section Display Customization in the The Emacs MIME Manual and the
documentation for the Gnus command W h (see section
Article Washing in the
The Gnus Manual).
A useful key binding that you can add to ~/.emacs is the
following which displays an HTML link or textual URL in an external
browser when clicked with S-mouse-2. This binding works in any
buffer, including HTML buffers.
(global-set-key [S-mouse-2] 'browse-url-at-mouse)