Функция mail() в PHP прекрасно* отправляет HTML-письма.
Надо только добавить заголовок ("content-type: text/html; charset=UTF-8").
Вот пример вызова: $res = @mail($email, $subject, $message, "FROM:" . $from_email . "\nREPLY-TO:" . $reply_to_email . "\ncontent-type: text/html; charset=UTF-8");
В $message у вас будет HTML-код письма. Это вариант для бедных - ваш скрипт потребует минимальных изменений.
Но "большие дядьки" делают по-другому. Они шлют т.е. multipart письмо, где есть и текстовая и HTML-версия. Код лля его отправки написать чуть сложнее (у меня это почти 20 строк).
Но тут помогут уже написанные классы, чудовищные по своему размеру и неудобству (посравнению с простым вызовом mail()), зато пользующиеся всеобщей любовью.
* - могут быть проблемы с кодировками (в т.ч. кодировкой subject, т.к. для этого есть отдельный алгоритм кодирования) в отдельных почтовых клиентах, типа Lotus Notes.