PHP mail not formatting HTML

I’m trying to contain some HTML in an email receipt based off a form submission, however all the html in $message2 is being sent as plain text.

Code:

$to = "[email protected]"; // this is your Email address
    $from = $_POST['EMAIL']; // this is the sender's Email address
    $first_name = $_POST['FIRSTNAME'];
    $last_name = $_POST['SURNAME'];
    $subject = "subject";
    $subject2 = "subject";
    $message = $first_name . " " . $last_name . " wrote the following:" . "nn" . $_POST['PRODUCTNAME'];
    
  
    $message2 = 
    "<html>" .
        "<head>" .
    "<title>HTML email</title>" .
        "</head>" .
        " <table cellspacing='0' cellpadding='0' border='0' align='center' width='600' style='margin: auto;' class='email-container'>
    <tr>
        <td style='padding: 20px 0; text-align: center'>
            <img src='http://placehold.it/200x50' width='200' height='50' alt='alt_text' border='0'>
        </td>
    </tr>" . 
    " <tr> " . 
        "<td style='padding: 20px 0; text-align: center'>" .
            "Hi " . $first_name . "," . "nn" . "You have sucessfully registered " . $_POST['PRODUCTNAME'] . " (" . $_POST['PRODUCTCODE'] . ")" . "nn" .
            "Your registration code is " . $unixNow . "nn" . "If you have any queries or require assistance, please contact [email protected]" . "nn" . 
            "Please retain a copy of your email confirmation. " .
        " </td> " .
    " </tr> " .
    "<tr>
        <td style='padding: 20px 0; text-align: center'>
            <img src='http://placehold.it/200x50' width='200' height='50' alt='alt_text' border='0'>
        </td>
    </tr>" . 
        "</table>" .
    "</html>";

    // Always set content-type when sending HTML email
    $headers = "MIME-Version: 1.0" . "rn";
        $headers .= "Content-type:text/html;charset=UTF-8" . "rn";

    
    $headers = "From:" . $from;
    $headers2 = "From:" . $to;
    mail($to,$subject,$message,$headers);
    mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender
    
?>

Can someone explain what i’m doing wrong and how to correct my error?

Answer

Your message #2 doesn’t use your defined MIME/ContentType headers. $headers = "From:" . $from; would also overwrite those. Name your MIME/ContentType headers to a different name and add it to your message #2 headers:

// Always set content-type when sending HTML email
$htmlHeaders = "MIME-Version: 1.0" . "rn";
$htmlHeaders .= "Content-type:text/html;charset=UTF-8" . "rn";

$headers = "From:" . $from;
$headers2 = $htmlHeaders . "From:" . $to;
mail($to,$subject,$message,$headers);
mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender