Try the PEAR Mail_Mime package, which can embed images for you.
When I answered this question, I posted a quick sample, but found that using the API as written produced a message with an image attachment, but wasn't rendered inline. A little nastiness is required to make it work with this class.
Specifically, you need the content-ID for the attached image, and Mail_mime won't give this to you directly. Right after calling addHTMLImage, you need to fish it out of Mail_mime's internal structures. Not great.
Here then is a butt-ugly way to do with Mail_mime...
include('Mail.php');
include "Mail/mime.php";
$crlf = "\r\n";
$hdrs = array(
'From' => '[email protected]',
'Subject' => 'Mail_mime test message'
);
$mime = new Mail_mime($crlf);
$mime->addHTMLImage("/path/to/myimage.gif", "image/gif");
//here's the butt-ugly bit where we grab the content id
$cid=$mime->_html_images[count($mime->_html_images)-1]['cid'];
//now we can use the content id in our message
$html = '<html><body><img src="cid:'.$cid.'"></body></html>';
$text = 'Plain text version of email';
$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$body = $mime->get();
$hdrs = $mime->headers($hdrs);
$mail =& Mail::factory('mail');
$mail->send('[email protected]', $hdrs, $body);