HTML und plain Message versenden
Can
- php
0 Stefan0 Can0 Der Martin0 Can
Hi Leute,
also ich will eine Mail versenden in HTML und Plain. aber die Mail kommt immer ohne Inhalt an, bzw. der HTML teil wird als Text dargestellt. Der code sieht so aus:
Die Variable $body ist kompletter HTML Code...
$bndp = md5(time()).rand(1000,9999);
$headers ="From: $absender <$absender_mail>\r\n";
$headers .= "Message-ID: <$XID@$sendedomain>\r\n";
$headers .= "Date: ".date("r")."\r\n";
$headers .= "Reply-To: $reply_mail\r\n";
$headers .= "X-Mailer: PHP/" . phpversion(). "\r\n";
//$headers .= "errors-to: $error_mail\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/alternative\r\n";
$headers .= "boundary="$bndp";\r\n";
$headers .= "This is a multi-part message in MIME format\r\n";
//$msg .= "--".$bndp."\r\n";
$msg .= "Content-Type: text/plain; charset="iso-8859-1";\r\n";
$msg .= "Content-Transfer-Encoding: 8bit\r\n";
$msg .= $textmsg."\r\n";
$msg .= "--".$bndp."-- \r\n\r\n";
$msg = "--$bndp\r\n";
$msg .= "Content-Type: text/html; \n\r charset="iso-8859-1";\r\n";
$msg .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
$msg .= $body."\r\n";
Viele Grüße, Can
Ich würde dir raten, dir eine fertige Klasse zu besorgen, die das Mail versenden übernimmt. Das ist nämlich ein ziemlich komplexes Thema. Wahrscheinlich hast du nur irgendwo im Header ein \r\n zuviel oder zuwenig.
http://xpertmailer.sourceforge.net/
Guck dir die Klasse mal an. Ich verwende sie und hab damit keine Probleme und bisher auch alles easy hinbekommen(attachment, html, plain usw.)
Gruss Stefan
Servus Stefan,
danke für den Tipp. Das klingt sehr gut, ich frickle nämlich schon seit Stunden rum...
Danke schön.
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
Hallo Martin,
wow, so ein genial ausführliches Posting habe ich selten bekommen! Vielen Dank dafür. Jetzt habe ich wieder mal so einiges dazu gelernt. Die Tatsache das ein boundary nur eine Ergänzung ist wusste ich nicht. Jetzt sieht die Welt gleich ganz anders aus und meine Mail kommt auch so perfekt an.
Aber XPM4 ist auch nicht schlecht. Sehr einfach zu bedienen jedenfalls. Aber auf jedenfall ist mir auch bei der selbst gestrickten Version wohler!
Also vielen Dank und ein schönes Wochende! Can
Hi Can,
wow, so ein genial ausführliches Posting habe ich selten bekommen!
wow, so ein genial direktes Lob habe ich selten bekommen! ;-)
Okay, freut mich, wenn's geholfen hat. Leider erlebe ich es hier oft, dass ein Fremder (jemand, der hier nur selten oder nur einmal vorbeikommt) eine Frage stellt, drei bis vier Antworten bekommt, und nie wieder etwas von sich hören lässt. Als Helfer weiß man dann nicht, ob die Hilfe überhaupt zur Kenntnis genommen wird, geschweige denn, ob sie den Fragenden wirklich weiterbringt. Solche Rückmeldungen, wie du sie hier ablieferst, geben uns die Motivation, weiterzumachen.
Jetzt habe ich wieder mal so einiges dazu gelernt.
Das ist der Sinn der Sache.
[...] und meine Mail kommt auch so perfekt an.
Na also. :-)
Dir auch noch ein schönes Wochenende,
Martin
Hallo Martin!
Okay, freut mich, wenn's geholfen hat. Leider erlebe ich es hier oft, dass ein Fremder (jemand, der hier nur selten oder nur einmal vorbeikommt) eine Frage stellt, drei bis vier Antworten bekommt, und nie wieder etwas von sich hören lässt.
Einmal konnten wir (ich glaube, es war Gunnar - und ich) beobachten, wie der OP (der eine OP war) die Tipps aus den Antworten umgesetzt hat - ohne sich je wieder selbst im Thread zu melden ;)
Viele Grüße aus Frankfurt/Main,
Patrick