The MIME Content type you want in the header is "multipart/alternative"; say it's text, and the whole body will be treated as text - say it's HTML and the whole body will be treated as HTML. You're saying it's HTML, but then changing your mind and saying it's text, so that's how it gets rendered.
The 'multipart/alternative' type, however, is not enough to say what type each section is. That has to be specified in the body.
But you also have to say where one section ends and the next begins. That is also specified via the Content-Type header. In full, it should look something like
Content-Type: multipart/alternative;
boundary="=_64f608c553b22162da57be5df83aa5f5"
(where the big whack of hex is any dynamcially string that shouldn't ever appear anywhere else in the message).
Between each section of the body, stick a line that reads
--=_64f608c553b22162da57be5df83aa5f5
(needless to say, use the same boundary marker here as specified in the header), and after that a Content-Type header that says what type this section is:
Content-Type: text/html
So the body as a whole would look something like
--=_64f608c553b22162da57be5df83aa5f5
Content-Type: text/plain; charset="ISO-8859-1"
Just some text
--=_64f608c553b22162da57be5df83aa5f5
Content-Type: text/html; charset="ISO-8859-1"
<html><head><title>Just some HTML</title></head></html>
--=_64f608c553b22162da57be5df83aa5f5--
I think that's right; I reverse-engineered it just now from Richard Heye's HTML MIME Mail class at PHPGuru.org, which is what I personally usually use for this sort of thing.