php mail() not sending HTML emails correctly

13,554

Solution 1

Had the same problem, where sending following header produced a HTML-Email on one server but didn't work on another server

$headers  = 'From: [email protected]\r\n' .
            'MIME-Version: 1.0' . "\r\n" . 
            'Content-type: text/html; charset=iso-8859-1' . "\r\n" .
            "X-Mailer: PHP";

It turned out, that the \r\n was a duplicate linebreak for the server. So just using \n as a line break worked for me.

$headers  = 'From: [email protected]\n' .
            'MIME-Version: 1.0' . "\n" . 
            'Content-type: text/html; charset=iso-8859-1' . "\n" .
            "X-Mailer: PHP";

Solution 2

There is a good example on the PHP manual site (here) that shows how to do this. Try copy and paste example 4.

It looks like you are not sending the string to identify the content type through in the headers properly. Maybe you should do a "show original" in Gmail and post the headers here as well if you can't get it right from the manual.

Solution 3

It looks like the blank line after MIME-Version indicates that the header is over, so it is outputting the Content-Type line as regular text, and the html after it, instead of reading that line as part of the header to know to convert the rest to HTML.

MIME-Version: 1.0

Content-Type: text/html; charset=ISO-8859-1

<html><body>

Try getting whatever is generating your headers to remove the blank line between MIME-Version and Content-Type. (For instance, do you have an extra \r\n on that line? What does your code look like where these lines are being generated?) Also maybe add a second blank line between Content-Type and <html>.

Solution 4

Try this..

     $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
     $headers .= 'From:  ' . $sender . ' <' . $sender .'>' . " \r\n" .
    'Reply-To: '.  $sender . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

Solution 5

Header problem was solved in php mail() function.

         $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
         $headers .= 'From:  ' . $senderEmail . ' <' . $senderEmail .'>' . " 
         \r\n" .
        'Reply-To: '.  $senderEmail . "\r\n" .
        'X-Mailer: PHP/' . phpversion();
Share:
13,554
Simon
Author by

Simon

doop

Updated on June 15, 2022

Comments

  • Simon
    Simon almost 2 years

    I'm using the php script found here:

    http://css-tricks.com/2866-sending-nice-html-email-with-php/

    I've uploaded it to my server - and it refuses to send emails correctly!

    This is what I receive in Gmail: (displays as raw html)

    Content-Type: text/html; charset=ISO-8859-1
    <html>
        <body>
            <img src="http://css-tricks.com/examples/WebsiteChangeRequestForm/images/wcrf-header.png" alt="Website Change Request" />
            <table rules="all" style="border-color: #666;" cellpadding="10">
                <tr style='background: #eee;'>
                    <td><strong>Name:</strong> </td>
                    <td>sd</td>
                </tr>
                <tr>
                    <td><strong>Email:</strong> </td>
                    <td>[email protected]</td>
                </tr>
                <tr>
                    <td><strong>Type of Change:</strong> </td>
                    <td>Change to Existing Content</td>
                </tr>
                <tr>
                    <td><strong>Urgency:</strong> </td>
                    <td>Super Wicked Urgent</td>
                </tr>
                <tr>
                    <td><strong>URL To Change (main):</strong> </td>
                    <td>http://css-tricks.com/2866-sending-nice-html-email-with-php/</td>
                </tr>
                <tr>
                    <td><strong>CURRENT Content:</strong></td>
                    <td>fdasgdsfg</td>
                </tr>
                <tr>
                    <td><strong>NEW Content:</strong> </td>
                    <td>sdfgsdgf</td>
                </tr>
            </table>
        </body>
    </html>
    

    Is there any server settings that I may have to change???

    I've also used some wordpress plugins on this server that seem to have the same issue.

    Any ideas would be great.

    UPDATE:

    ** UPDATE **

    Here's what i get in Gmail when i click "Show Original"

    Delivered-To: [removed-intentionally]@gmail.com
    Received: by 10.204.157.136 with SMTP id b8cs43947bkx;
        Sun, 14 Aug 2011 22:29:40 -0700 (PDT)
    Received: from mr.google.com ([10.236.77.232])
        by 10.236.77.232 with SMTP id d68mr14702149yhe.74.1313386180151 (num_hops = 1);
        Sun, 14 Aug 2011 22:29:40 -0700 (PDT)
    Received: by 10.236.77.232 with SMTP id d68mr11051146yhe.74.1313386179570;
        Sun, 14 Aug 2011 22:29:39 -0700 (PDT)
    Return-Path: <[email protected]>
    Received: from ironport1-mx.cbr1.mail-filtering.com.au (ironport1-mx.cbr1.mail-filtering.com.au [203.88.115.241])
        by mx.google.com with ESMTP id g70si16130380yhe.152.2011.08.14.22.29.38;
        Sun, 14 Aug 2011 22:29:39 -0700 (PDT)
    Received-SPF: neutral (google.com: 203.88.115.241 is neither permitted nor denied by best guess record for domain of [email protected]) client-ip=203.88.115.241;
    Authentication-Results: mx.google.com; spf=neutral (google.com: 203.88.115.241 is neither permitted nor denied by best guess record for domain of [email protected]) [email protected]
    X-IronPort-Anti-Spam-Filtered: true
    X-IronPort-Anti-Spam-Result: AqoHAHOuSE5xFATR/2dsb2JhbABBmHOPCHeEEYd0lCyfAIZHBKQJ
    X-IronPort-AV: E=Sophos;i="4.67,372,1309701600"; 
    d="scan'208,217";a="465774510"
    Received: from ub002lps00.cbr.the-server.net.au ([113.20.4.209])
    by ironport1-mta.cbr1.mail-filtering.com.au with ESMTP; 15 Aug 2011 15:29:03 +1000
    Received: (qmail 14705 invoked by uid 10317); 15 Aug 2011 07:29:02 +0200
    Date: 15 Aug 2011 07:29:02 +0200
    Message-ID: <[email protected]>
    To: [removed-intentionally]@gmail.com
    Subject: Website Change Reqest
    From: [removed-intentionally]@gmail.com
    Reply-To: [removed-intentionally]@gmail.com
    MIME-Version: 1.0
    
    Content-Type: text/html; charset=ISO-8859-1
    
    <html><body><img src="http://css-tricks.com/examples/WebsiteChangeRequestForm/images/wcrf-header.png" alt="Website Change Request" /><table rules="all" style="border-color: #666;" cellpadding="10"><tr style='background: #eee;'><td><strong>Name:</strong> </td><td>sd</td></tr><tr><td><strong>Email:</strong> </td><td>[removed-intentionally]@gmail.com</td></tr><tr><td><strong>Type of Change:</strong> </td><td>Change to Existing Content</td></tr><tr><td><strong>Urgency:</strong> </td><td>Super Wicked Urgent</td></tr><tr><td><strong>URL To Change (main):</strong> </td><td>http://css-tricks.com/2866-sending-nice-html-email-with-php/</td></tr><tr><td><strong>CURRENT Content:</strong> </td><td>fdasgdsfg</td></tr><tr><td><strong>NEW Content:</strong> </td><td>sdfgsdgf</td></tr></table></body></html>