human: Mail mit inline image

Hallo,

ich versuche gerade verzweifelt eine E-Mail mit einem inline image zu versenden...

Finde einfach keinen Fehler.

Hier der Sourcecode:

$fp = fopen($img_name, "r");
$content = fread($fp, filesize($img_name));
fclose($fp);

$img_code = base64_encode($content);

$boundary = "-------**";

$receiver = "email@test.de";
$sender = "test";
$subject = "test";

$header = "MIME-Version: 1.0\r\n";
$header .= "From: ".$sender."\n";
$header .= "Content-Type: multipart/related;\n\tboundary=".$boundary."\n";
$header .= "Content-Disposition:inline\n";

$content = "\n".$boundary."\n";
$content .= "Content-Type: text/html;charset=iso-8859-1\n";
$content .= "Content-Transfer-Encoding: 8bit\n\n";

$content .= "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">\n";
$content .= "<html>\n";
$content .= "<head>\n";
$content .= "<title>test</title>\n";
$content .= "</head>\n";
$content .= "<body>\n";
$content .= "<p>hier steht was...</p>\n";
$content .= "</body>\n";
$content .= "</html>\n";

$content .= "\n".$boundary."\n";
$content .= "Content-Type: application/octetstream;\n\tname=".$img_name."\n";
$content .= "Content-Transfer-Encoding: base64\n";
$content .= "Content-ID: <modinelogo>\n";

$content .= "Content-Disposition:inline;filename=".$img_name."\n\n";

$content .= $img_code;

$content .= $boundary;

mail($receiver,$subject,$content,$header);

Wär echt suuupppeer wenn mir jemand helfen könnte. Die Mail die ich erhalte zeigt nur den Quellcode an, aber nicht den Text und das Bild...

  1. hat sich erledigt...

    es lag an $header = "MIME-Version: 1.0\r\n";

    das \r hab ich rausgenommen und jetzt gehts...

  2. Hallo human,

    $fp           = fopen($img_name, "r");
    $img_code     = wordwrap(base64_encode(fread($fp, filesize($img_name))),75,"\n",1);
    fclose($fp);

    $html         = "/* hier definieren, wie HTML zustande kommt!*/";
    $plain        = wordwrap(strip_tags($html));
    $html         = wordwrap($html);

    $b            = "-08@15";
    $boundary     = "---08@15";

    $receiver     = "email@test.de";
    $sender       = "test@test.de";

    $subject    = "test";

    $header     = "MIME-Version: 1.0\r\n";
    $header    .= "From: ".$sender."\n";

    $header      .= "Content-Type: multipart/related;\n\ttype="multipart/alternative";\n\tboundary=".$b."\n";

    $content      = "\n".$boundary."\n";
    $content     .= "Content-Type: text/plain; charset=ISO-8859-1\n";
    $content     .= "Content-Transfer-Encoding: 8bit\n\n";
    $content     .= $plain."\n";

    $content   .= "\n".$boundary."\n";
    $content   .= "Content-Type: text/html;charset=iso-8859-1\n";
    $content   .= "Content-Transfer-Encoding: 8bit\n\n";

    $content     .= $html."\n";

    $content   .= "\n".$boundary."\n";

    $content     .= "Content-Type: image/jpeg /* Mimetype image erscheint mir sinnvoller */;\n\tname=".$img_name."\n";

    $content   .= "Content-Transfer-Encoding: base64\n";
    $content   .= "Content-ID: <modinelogo>\n";

    $content   .= $img_code;

    $content   .= $boundary.'--';

    mail($receiver,$subject,$content,$header);

    Wär echt suuupppeer wenn mir jemand helfen könnte. Die Mail die ich erhalte zeigt nur den Quellcode an, aber nicht den Text und das Bild...

    Je nach Mail-Client kann die ein Textumbruch in der Form "\n" auch um die Ohren fliegen! Bitte dann mit "\r\n" versuchen.
    Aber in Deinem Fall ist es, was mir aufgefallen ist, lediglich (wie immer ;) am boundary gescheitert. Die Grenzdeklaration im Inhalt hat am Anfang immer "--" + Grenzwert.

    Gruß aus Berlin!
    eddi