Hallo,
Ich würde dir raten, dir eine fertige Klasse zu besorgen, die das Mail versenden übernimmt.
da kann man natürlich unterschiedlicher Ansicht sein; ich persönlich finde es aber wesentlich einfacher, den Mail-Inhalt nach dem Baukastenprinzip selbst, quasi "von Hand" zusammenzustellen, als mich erst in irgendwelche Klassen und Bibliotheken einarbeiten zu müssen.
Das ist nämlich ein ziemlich komplexes Thema.
Eigentlich gar nicht. ;-)
Fertige Bibliotheken zu verwenden ist oft viel komplexer, weil sie meistens sehr universell geschrieben sind. Das hat dann zur Folge, dass man entweder viele Parameter kennen und richtig setzen muss, damit die Chose überhaupt funktioniert; oder man verbringt Stunden damit, in der Doku zur Bibliothek das rauszusuchen, was man wirklich braucht.
Wahrscheinlich hast du nur irgendwo im Header ein \r\n zuviel oder zuwenig.
Das wäre ein häufiger Fehler. Hier sieht es mir aber eher so aus, als hätte Can "mal wieder" nicht sauber zwischen Header und Body getrennt. "Mal wieder", weil das oft falsch gemacht wird, sich aber meistens nicht auswirkt. Aber da ist noch ein anderer Fehler:
$headers .= "Content-Type: multipart/alternative\r\n";
$headers .= "boundary="$bndp";\r\n";
Die boundary-Angabe ist keine eigene Headerzeile, sondern nur eine Ergänzung der Content-Type-Angabe. Ergo: Erstens gehört ein Semikolon hinter "Content-Type: multipart/alternative", zweitens der Teil mit dem boundary entweder mit einem Leerzeichen direkt anschließend in dieselbe Zeile, oder in eine neue Zeile, dann aber mit einem Leerzeichen eingerückt.
$headers .= "This is a multi-part message in MIME format\r\n";
Diesen Infostring noch in den Header mit aufzunehmen, ist nicht ganz sauber, der gehört eigentlich schon zum umschließenden Mail-Body. Das hatte ich oben gemeint, als ich schrieb, "mal wieder nicht sauber getrennt".
Wenn man also, formal nicht ganz korrekt, diesen String noch in den Header aufnehmen will, muss man ihn mit _zwei_ Zeilenumbrüchen vom vorhergehenden Gerümpel abtrennen. Sauberer wäre aber, den als ersten Baustein in $msg zu packen.
//$msg .= "--".$bndp."\r\n";
Und warum ist der erste boundary-String hier auskommentiert? Der soll schon da hin, Frau Werwolf sagt, des g'hört so!
Der Rest sieht übrigens korrekt aus.
Schönes Wochenende,
Martin
Wenn alle das täten, wass sie mich können,
käme ich gar nicht mehr zum Sitzen.