HTML Mail über mail() versenden
Steff
- php
0 Felix Riesterer0 Sebastian Becker0 Tobias Kloth0 XaraX0 master0 XaraX
Hey :)
ich habe grad bei php.net geschaut, weil ich meine Formulardaten gerne als HTML Mail erhalten möchte.
Es funktioniert bloß nicht... so sieht das jetzt bei mir aus:
$name = "Vorname";
$email = "test@mail.de";
$subject = "Betreff";
$an = "email@irgendwas.de";
$nachricht = "Hier der Text";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: ".$name." <".$email.">\r\n";
mail($an, $subject, $nachricht, $headers);
---
Und in der Mail, die ich dann erhalte, ist kein Absender angegeben. Sie ist in plaintext und hat folgenden Inhalt:
Content-type: text/html; charset=iso-8859-1 From: Vorname test@mail.de
Message-Id: 20050218200804.99F5C474107@server2.greatnet.de
Date: Fri, 18 Feb 2005 21:08:04 +0100 (CET)
X-UIDL: P@m!!J$="!HLP"!:X^"!
Hier der Text
---
Weiß jemand, wo der Fehler liegen könnte?
Grüße
Steff
Hi Steff,
ich kann Dir vielleicht helfen:
$headers .= "From: ".$name." <".$email.">\r\n";
Da fehlen doppelte Anführungszeichen. Dein Absender soll doch in etwa so heißen: From: "ichbins <ich_bin-s@mail.de>". Aber durch deine Stringdefinitionen heißt es nur From: ichbins <ich_bin_s@mail.de ... Und PHP hat mit den unerwarteten < und > ein Problem, da es wohl darinnen irgendwelche anderen Sachen erwartet.
Probiers mal mit
$headers .= 'From: "'.$name.' <'.$email.'>"'."\r\n";
Damit könnte es klappen.
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo Felix,
$headers .= "From: ".$name." <".$email.">\r\n";
Da fehlen doppelte Anführungszeichen.
Unsinn, die Zeile ist völlig korrekt - es wird 3mal ein String angefangen und auch 3mal wieder beendet.
Grüße aus Nürnberg
Tobias
LieberTobias,
ich hatte kein Problem mit der Syntax für die Programmzeile. Ich hatte ein Problem mit der Syntax für den Variableninhalt des Headers.
Der Header verlangt u.a. eine Absenderadresse. Wenn nun in dieser Adresse ein in Email-Adressen ungültiges Zeichen (wie < oder >) enthalten ist, dann weiß ich nicht, wie die Funktion mail() damit umgeht. Daher war mein Vorschlag mit meiner modifizierten Code-Zeile, dass man die Email-Adresse _komplett_ in doppelten Anführungszeichen in die Variable $headers speichert.
Vergleiche:
Absender Email absender@mail.de
mit
"Absender Email absender@mail.de"
Unsinn, die Zeile ist völlig korrekt - es wird 3mal ein String angefangen und auch 3mal wieder beendet.
Vielleicht wird jetzt klar, dass _das_ nicht mein Problem war...
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo Felix,
Der Header verlangt u.a. eine Absenderadresse. Wenn nun in dieser Adresse ein in Email-Adressen ungültiges Zeichen (wie < oder >) enthalten ist, dann weiß ich nicht, wie die Funktion mail() damit umgeht. Daher war mein Vorschlag mit meiner modifizierten Code-Zeile, dass man die Email-Adresse _komplett_ in doppelten Anführungszeichen in die Variable $headers speichert.
wenn ich RFC2822 (Abschnitt 3.4.) richtig verstehe ist der Header:
From: Vorname Nachname name@example.com
(also ohne Anführungszeichen nach »From:«) völlig korrekt ...
Grüße aus Nürnberg
Tobias
Hallo Steff,
$headers = "MIME-Version: 1.0\r\n";
lass hier mal das \r weg, also nur
$headers = "MIME-Version: 1.0\n";
(ich vermute mal, dass aus dem \r\n zwei Zeilenumbrüche und somit das Ende des Headers werden)
Grüße aus Nürnberg
Tobias
Hallo Steffan,
eine Mail ist ein wenig mehr, als mal kurz einen Header zusammen zu schustern und dann zu versenden. Generell verwundert es mich immer wieder, da man Mails auf der Festplatte speichern kann und mit einem einfachen Texteditor anschauen kann, warum dies keiner tut...
Viele versuchen immer eine Mail im HTML-Format zu erstellen, vergessen dabei aber völlig, daß es auch Menschen gibt, die an einer Konsole Mails empfangen müssen. Mails haben die Möglichkeit mehrere MIME-Typen zu beherbergen. Daher ist oberstes Gebot immer ein Äquivalent im MIME text/plain mit zu versenden!
Die angesprochenen Tutorials wie http://www.php3-forum.de/mime_mail.htm gehen nicht einmal darauf ein, wie Header und boundaries auszuzeichnen sind. Hinzu kommt die mangelnde Relevants von eines mit $boundary = strtoupper(md5(uniqid(time()))); erstellten Wert.
Ist Doch schon mal kein grundschlechter Anfang:
$name = "Vorname";
$email = "test@mail.de";
$subject = "Betreff";
$an = "email@irgendwas.de";
$nachricht = "Hier der Text";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: ".$name." <".$email.">\r\n";
$b="was_auch_immer";
$head=
"From: $email\r\n".
"MIME-Version: 1.0\r\n".
"Content-Type: multipart/alternative;\n\tboundary="$b"\r\n";
Mehr braucht kein Mensch noch Client
$plain=
"--$b\r\n".
"Content-Type: text/plain;\r\n\tcharset="iso-8859-1"\r\n".
"Content-Transfer-Encoding: 8bit\r\n\r\n".
$plain_gestalteter_TextBody.
"\r\n\r\n";
Leute mit Textorientierten Clients können nun was lesen
$html=
"--$b\r\n".
"Content-Type: text/html;\r\n\tcharset="iso-8859-1"\r\n".
"Content-Transfer-Encoding: 8bit\r\n\r\n".
$html_gestalteter_valider_TextBody.
"\r\n\r\n";
Die Windowsfraktion ist nun auch glücklich
$nachricht=$plain.$html;
mail($an,$subject,$nachricht,$head);
Gruß aus Berlin!
eddi
Hallo würde gerne in meine website auch welche scripts einbauen.
nur wie geht das?
www.slitter-rewinder-secondhand.de
www.rollenschneidermarkt.de
ciao und danke
Hallo master,
das Einfachste wird es für Dich sein, Du fragst bei Deinem Webdesigner nach http://www.mcom-design.de/. Generell hat das Web unter http://www.slitter-rewinder-secondhand.de/formmailer.php bereits ein solches Script. Daher frage ich mich, was willst Du nun wissen?
Gruß aus Berlin!
eddi