Sending HTML email using PHP

I'm trying to get PHP to send out MIME HTML emails to our clients. There seems to be conflicting views as to how to do this but all versions I've tried have failed! Anyone know some code that structures the content correctly for the php mail function?
Who is Participating?
robertybobConnect With a Mentor Commented:
I searched for this for a while myself and whilst I got the PHPGuru code to work with little effort, it noted an attachment to the mail on receipt.

I came across this code which appears to work fine for me though not sure of any limitations, etc.

$to = "";
$subject = "My Subject";
$name = "Me";
$from= "";
$message .= "<html><body>Put content here</body></html>";
mail("$to","$subject","$message","From: $name <$from>\n"."MIME-Version: 1.0\n"."Content-type: text/html; charset=iso-8859-1");

Good luck!
why don't you use:

it's quite simple. Some people prefer the Pear solution:

Here is a class that I use without any problems (below it is how you would send the mail!):

class mime_mail
var $parts;
var $to;
var $from;
var $headers;
var $subject;
var $body;

  *     void mime_mail()
  *     class constructor
function mime_mail()
  $this->parts = array();
  $this->to =  "";
  $this->from =  "";
  $this->subject =  "";
  $this->body =  "";
  $this->headers =  "";

  *     void add_attachment(string message, [string name], [string ctype])
  *     Add an attachment to the mail object
function add_attachment($message, $name =  "", $ctype =  "application/octet-stream")
  $this->parts[] = array (
                           "ctype" => $ctype,
                           "message" => $message,
                           "encode" => $encode,
                           "name" => $name

*      void build_message(array part=
*      Build message parts of an multipart mail
function build_message($part)
$message = $part[ "message"];
$message = chunk_split(base64_encode($message));
$encoding =  "base64";
return  "Content-Type: ".$part[ "ctype"].
                        ($part[ "name"]? "; name = \"".$part[ "name"]. "\"" :  "").
                         "\nContent-Transfer-Encoding: $encoding\n\n$message\n";

*      void build_multipart()
*      Build a multipart mail
function build_multipart()
$boundary =  "b".md5(uniqid(time()));
$multipart =  "Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME
encoded message.\n\n--$boundary";

for($i = sizeof($this->parts)-1; $i >= 0; $i--)
    $multipart .=  "\n".$this->build_message($this->parts[$i]). "--$boundary";
return $multipart.=  "--\n";

*      void send()
*      Send the mail (last class-function to be called)
function send()
$mime =  "";
if (!empty($this->from))
    $mime .=  "From: ".$this->from. "\n";
if (!empty($this->headers))
    $mime .= $this->headers. "\n";

if (!empty($this->body))
    $this->add_attachment($this->body,  "",  "text/plain");
$mime .=  "MIME-Version: 1.0\n".$this->build_multipart();
mail($this->to, $this->subject,  "", $mime);
};  // end of class

$value="something for the body";

//this sends the mail
$mail = new mime_mail();
$mail->from = "test@test.test";
$mail->headers = "test@test.test";
$mail->to = "test@test.test";
$mail->subject = "New Order Specs";
$mail->body = "$values";
//$mail->add_attachment("$attachment", "test.jpg", "image/jpeg");
Cloud Class® Course: Microsoft Windows 7 Basic

This introductory course to Windows 7 environment will teach you about working with the Windows operating system. You will learn about basic functions including start menu; the desktop; managing files, folders, and libraries.

wjdashwoodAuthor Commented:
When I run the solution from essage this is what I get:
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary = b12079fe9803d2ea639736da4b91c6fb2

This is a MIME
encoded message.

Content-Type: text/plain
Content-Transfer-Encoding: base64


wjdashwoodAuthor Commented:
the htm content that was meant to be sent is the base 64 encryption PGI+...

Do you know why the full content (ie header info) is shown rather than just the intended coded mail?

Could it be something at my end on receipt?
You probably did not code the mail header correctly!
Every linebreak and tab in mail header is important! Check it!

General I suggest using the html_mimemail-class from Richard Heyes (
It's proofed and part of the PEAR class repository!

Try it! It's very simple!
I generally prefer using PEAR packages when possible:

this one works just fine.
PEAR packages work fine too.   Could you show us the code you are using (because I use the same code above in several of my apps, and I have no problems).   Is my code actually sending your mail?   Or is the problem the extra headers?
wjdashwoodAuthor Commented:
That answer seems to do what I want.

Thanks for all the help
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.