Dein Hauptptoblem war, daß die Content-ID nicht richtig in der E-Mail erschien.
Du solltest nicht die ganze E-Mail im Header verstauen. Reine HTML-Emails sind schlechter Stiel; es sollte auch eine Textversion vorhanden seien.
Beachte, daß nicht jedes E-Mail-Backend mit 8bit oder binären Daten umgehen kann. Um es sauber zu machen, müßten die Text-Teile noch als quoted-printable konvertiert werden. Da PHP dafür leider keine fertige Funktion mitliefert, war mir das zu aufwendig. Im HTML-Teil konvertiert die Funktion htmlentities() die meisten 8bit-Zeichen (nicht alle!). Wenn Du ein Unix-System mit 8bit-sicherem Mail-Backend hat, ist in der Regel die Angabe eines zusätzlichen Parameters nötig, z.B. mail($to, $subject, $message, $headers, '-B'). »man sendmail« sollte Dir die nötige Information liefern.
Bei Verständnisfragen, melde Dich nochmal.
Ciao, Schadfleck
<?php
define('EOL', "\n"); // Linux: "\n", Windows: "\r\n"
$from = 'test@test.de';
$to = 'email@email.de';
$betreff = 'Testnachricht';
$dateiname = 'bild.jpg'; // keine Umlaute und Sonderzeichen!
$bildbeschreibung = 'tolles Bild'; // kurzer einzeiliger Text
$text = 'Sie haben folgende Nachricht erhalten:' . EOL;
$text .= EOL;
$text .= 'weiterer Text' . EOL;
$text .= 'weiterer Text' . EOL;
$text .= EOL;
$text .= 'Datum/Zeit: ' . date("d.m.Y H:i:s") . EOL;
$subject = '=?iso-8859-1?B?' . base64_encode($betreff) . '?='; // nötig, falls Umlaute im Betreff
$cid = uniqid('att', TRUE) . '*' . $from;
$boundary = uniqid('=_', TRUE);
$bild = file_get_contents($dateiname);
if ($bild === FALSE)
die('konnte Bild ' . $dateiname . ' nicht lesen');
$headers = 'From: ' . $from . EOL;
$headers .= 'X-Mailer: PHP/' . phpversion() . EOL;
$headers .= 'MIME-Version: 1.0' . EOL;
$headers .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '-1"'; // letzte Zeile braucht kein EOL
$message = '--' . $boundary . '-1' . EOL;
$message .= 'Content-Type: text/plain; charset=iso-8859-1' . EOL;
$message .= 'Content-Transfer-Encoding: 8bit' . EOL;
$message .= EOL;
$message .= $text;
$message .= $bildbeschreibung . EOL;
$message .= EOL . '--' . $boundary . '-1'. EOL;
$message .= 'Content-Type: multipart/related; type="text/html"; boundary="' . $boundary . '-2"' . EOL;
$message .= EOL;
$message .= '--' . $boundary . '-2' . EOL;
$message .= 'Content-Type: text/html; charset=iso-8859-1' . EOL;
$message .= 'Content-Transfer-Encoding: 8bit'. EOL;
$message .= EOL;
$message .= '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"' . EOL;
$message .= ' "http://www.w3.org/TR/html4/strict.dtd">' . EOL;
$message .= '<HTML>' . EOL;
$message .= '<HEAD>' . EOL;
$message .= ' <TITLE>' . htmlentities($betreff) . '</TITLE>' . EOL;
$message .= '</HEAD>' . EOL;
$message .= '<BODY>' . EOL;
$message .= ' <P>' . EOL;
$message .= strtr(htmlentities($text), array("\r\n" => '<BR>' . EOL, "\n" => '<BR>' . EOL));
$message .= ' </P>' . EOL;
$message .= ' <P>' . EOL;
$message .= ' Bild:' . EOL;
$message .= ' <IMG src="cid:' . $cid . '" alt="' . htmlentities($bildbeschreibung) . '">' . EOL;
$message .= ' </P>' . EOL;
$message .= '</BODY>' . EOL;
$message .= '</HTML>' . EOL;
$message .= EOL . '--' . $boundary . '-2' . EOL;
$message .= 'Content-Type: image/jpeg; name="' . $dateiname . '"' . EOL;
$message .= 'Content-ID: <' . $cid . '>' . EOL;
$message .= 'Content-Transfer-Encoding: base64' . EOL;
$message .= EOL;
$message .= chunk_split(base64_encode($bild), 76, EOL);
$message .= EOL . '--' . $boundary . '-2--';
$message .= EOL . '--' . $boundary . '-1--';
if (!mail($to, $subject, $message, $headers))
die('Fehler beim E-Mail-Versand!');
?>
[/php]