forse ho capito il motivo: tu utilizzi il metodo setText,

dalle API della sun vedo che tale metodo è <<
A convenience method that sets the given String as this part's content with a MIME type of "text/plain". >>
Quindi di fatto tu prima setti il content in html, poi con il metodo setText lo rimetti a testo normale.
Usa semplicemente
codice:
messaggio.setContent(testoMessaggio, "text/html");