Der Martin: mail mit eingebettetem Bild versenden

Beitrag lesen

Hallo,

Ich habe mal den Script, ...

immer noch "den"? Im Deutschen heißt es DAS Script.

Der dritte Parameter steht immer noch auf "". Aber das scheint Thunderbird und outlook express nicht zu stören.

Natürlich nicht, die bekommen ja auch nichts davon mit, wie du deinen Mail-Quellcode zusammenbaust. Das sieht nur der PHP-Interpreter auf deinem Server.

Eigentlich wüßte ich auch nicht genau, was ich in den dritten Parameter genau reinschreiben sollte. Habe das nicht so richtig verstanden .....

Also nochmal: Alles was du VOR dem doppelten Zeilenumbruch hast, gehört zum Header (vierter Parameter). Was NACH dem doppelten Zeilenumbruch kommt, ist der Mail Body, auch Message Text genannt und gehört formal gesehen als dritter Parameter übergeben.
Deine Version funktioniert deshalb, weil für den endgültigen Versand sowieso die Header und der Message Text zu EINEM String verbunden werden. Deswegen habe ich dir klarzumachen versucht, dass dies ein formaler Fehler ist, der aber für das Funktionieren nicht relevant ist.

<?php
$Empfaenger = "x.y@z.de";
$Betreff = "Meine erste Mail mit Anhang";
$Dateiname = "Poster.gif";
$DateinameMail = "Poster.gif";
$Header = "From: Mein Name meine@mailadresse.de";
$Trenner = md5(uniqid(time()));
$Header .= "\r\n";
$Header .= "MIME-Version: 1.0";
$Header .= "\n";

Hier fehlt \r.

$Header .= 'Content-Type: multipart/related; boundary="MIME-Trenner"';
$Header .= "\r\n";

Hier möchten zwei \r\n stehen, weil hier der Header zu Ende ist. Alles, was hier noch folgt, gehört genaugenommen als dritter Parameter an mail() übergeben.

$Header .= "This is a multi-part message in MIME format";
$Header .= "\n";

Hier fehlt wieder \r.

$Header .= "--MIME-Trenner";
$Header .= "\n";

Hier auch.

$Header .= "Content-Type: text/html; charset=us-ascii";
$Header .= "\n";

Und hier auch.

$Header .= "Content-Transfer-Encoding: 7bit";
$Header .= "\r\n";
$Header .='Das ist ein Test<p>&nbsp;</p><p>&nbsp;</p><p align="center"><img src="cid:1234code4321">';
$Header .= "\n";

Hier ... ach, du weißt schon. Und noch ein paarmal. ;-)

$Header .="<p>&nbsp;</p><p>&nbsp;</p><b>Und das auch ...";
$Header .= "\n";
$Header .= "--MIME-Trenner";
$Header .= "\n";
$Header .= "Content-Type: image/gif; name=$DateinameMail";

Der Zusatz name=... kann entfallen, er hat keinerlei Funktion.

$Header .= "\n";
$Header .= "Content-Transfer-Encoding: base64";
$Header .= "\n";
$Header .= "Content-Disposition: inline; filename=$DateinameMail";

Content-Disposition ist bei inline referenzierten Objekten auch überflüssig.

$Header .= "\n";
$Header .="Content-ID: <1234code4321>";
$Header .= "\r\n";
$Dateiinhalt = fread(fopen($Dateiname, "r"), filesize($Dateiname));
$Header .= chunk_split(base64_encode($Dateiinhalt));
$Header .= "\n";
$Header .= "--MIME-Trenner--";
mail($Empfaenger, $Betreff, "", $Header);
?>

So long,
 Martin

--
Wenn alle das täten, wass sie mich können,
käme ich gar nicht mehr zum Sitzen.