Rmail automatically decodes messages which contain non-ASCII characters, just as Emacs does with files you visit and with subprocess output. Rmail uses the standard ‘charset=charset’ header in the message, if any, to determine how the message was encoded by the sender. It maps charset into the corresponding Emacs coding system (see Coding Systems), and uses that coding system to decode message text. If the message header doesn't have the ‘charset’ specification, or if charset is not recognized, Rmail chooses the coding system with the usual Emacs heuristics and defaults (see Recognize Coding).
Occasionally, a message is decoded incorrectly, either because Emacs
guessed the wrong coding system in the absence of the ‘charset’
specification, or because the specification was inaccurate. For
example, a misconfigured mailer could send a message with a
‘charset=iso-8859-1’ header when the message is actually encoded
koi8-r. When you see the message text garbled, or some of
its characters displayed as hex codes or empty boxes, this may have
You can correct the problem by decoding the message again using the right coding system, if you can figure out or guess which one is right. To do this, invoke the M-x rmail-redecode-body command. It reads the name of a coding system, and then redecodes the message using the coding system you specified. If you specified the right coding system, the result should be readable.