0

I am trying to send an html email with PHP and it keeps coming just as text. All of the values are generated correctly from the php it is just text in the email. Here is the code:

    $to='xxxxxxx@xxxxxxx.com';
    $from = 'xxxxxxx@xxxxxxxx.com';
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers = "From: $from \r\n";
    $subject = "Print Run: " . $run . " is ordered";
    $body ="<html>
            <head>
            </head>
            <body>
            <table>
                <tr>
                    <th>Company</th>
                    <th>Quantity</th>
                    <th>Size</th>
                    <th>Date Added</th>
                    <th>
                    </th>
                </tr>";
            for($i = 0; $i < $arraySize; $i++){     
                $body .= "<tr><td>" . $companyName[$i] . "</td><td>" . $quantity[$i] . "</td><td>" . $cardSize[$i] . "</td><td>" . $dateAdded[$i] . "</td></tr>";
            }
            $body .= "<tr>
                        <td style=\"font-weight:bold; border-style:solid; border-top-width:1px;\">Totals</td>
                        <td style=\"font-weight:bold; border-style:solid; border-top-width:1px;\">" . $totals . "</td>
                        <td></td>
                        <td></td>
                        <td></td>
                        </tr>
                        </table>
                        </body>
                        </html>";

    mail($to,"Print Run: " . $run . " is ordered",$body,$headers);
shinjuo
  • 20,498
  • 23
  • 73
  • 104

1 Answers1

11

You overwrite the header on the last of the three lines:

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers = "From: $from \r\n";

Should be (note the dot):

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= "From: $from \r\n";
Alix Axel
  • 151,645
  • 95
  • 393
  • 500
Simon Forsberg
  • 13,086
  • 10
  • 64
  • 108
  • Wasn't so hard to discover it, really :) – Simon Forsberg Apr 05 '12 at 15:23
  • One other gotcha i've seen is the "\r\n". This will fail on some systems and should be replaced with PHP_EOL. – Mr Griever Apr 05 '12 at 15:24
  • 2
    @Matt H: Your comment is misleading, you should back that up with the RFC and PHP source-code. `"\r\n"` is absolutely correct, see as well [Which line break in php mail header, \r\n or \n?](http://stackoverflow.com/q/4415654/367456). – hakre Apr 05 '12 at 15:43