PHP mail() - Finde meinen Fehler nicht!
Oli
- php
Hallo,
ich erstelle gerade ein ganz einfaches Kontaktformular, das in eine Webseite eingebaut werden wird... Irgendwie wollen die Mails nicht mehr ankommen, seitdem ich die Headers geändert habe, damit auch Umlaute richtig behandelt werden.
Hier der Ausschnitt aus meinem Script:
@mail($an, "Anfrage über Online-Kontaktformular: " . $betreff, $text, "Mime-Version: 1.0\nContent-Type: text/plain; charset=ISO-8859-1\nContent-Transfer-Encoding: quoted-printable\nFrom: " . $email);
Ich bin mir sicher, es ist irgendeine Kleinigkeit, wie ein fehlender Zeilenumbruch oder ein fehlendes Zeichen oder sowas. Ich kann den Fehler aber einfach nicht finden. Die Zeilenumbrüche hier kommen nur durch das kleine Formularfeld zustande, das Original ist quasi in einer Zeile und Zeilenumbrüche erfolgen nur durch \n.
Vielen Dank!
Oli
Liegt es vielleicht daran, dass dein Server diese Funktion gar nicht unterstützt?
Hier habe ich etwas gefunden: http://forum.de.selfhtml.org/archiv/2005/2/t101623/
Vielleicht hilft's ja.
Liegt es vielleicht daran, dass dein Server diese Funktion gar nicht unterstützt?
Hier habe ich etwas gefunden: http://forum.de.selfhtml.org/archiv/2005/2/t101623/
Vielleicht hilft's ja.
Hallo,
doch, der unterstützt mail().
Habe ja geschrieben, das der erst seit der Headerveränderung nicht mehr so ganz will und bin mir sicher, dass ich da nur irgendwas falsch formatiert habe, da ich die Informationen quasi auf gut Glück in den Quelltext integriert habe.
Hallo,
@mail($an, "Anfrage über Online-Kontaktformular: " . $betreff, $text, "Mime-Version: 1.0\nContent-Type: text/plain; charset=ISO-8859-1\nContent-Transfer-Encoding: quoted-printable\nFrom: " . $email);
[...] Zeilenumbrüche erfolgen nur durch \n.
Und genau da könnte der Hund begraben sein.
Hast Du es schon mit \r\n probiert?
Das wäre nämlich die Standard-Schreibweise gemäss
http://www.php.net/manual/de/function.mail.php
additional_headers (optional)
String, der am Ende des E-Mail-Headers eingefügt werden soll.
Dies kann benutzt werden, um zusätzliche Header-Angaben wie From,
Cc oder Bcc anzugeben. Falls mehrere solcher zusätzlichen
Header-Angaben angegeben werden soll, müssen diese durch ein
CRLF-Zeichen (\r\n) getrennt werden.
Weiter unten wird eine Ausnahme genannt:
Hinweis: Wenn E-Mails nicht ankommen, versuchen Sie bitte,
nur das LF-Zeichen (\n) zu verwenden. Einige UNIX-MTAs
(mail transfer agents) ersetzen leider LF durch CRLF (\r\n)
automatisch (wodurch das CR-Zeichen verdoppelt wird,
wenn CRLF verwendet wird). Dies sollte aber nur in
Ausnahmefällen geschehen, da es gegen RFC 2822 verstößt.
Und sonst könntest Du mal versuchen, nur eine Header-Zeile
nach dem anderen hinzuzufügen, angefangen mit From:,
und zu schauen, welche Header-Zeile das Problem verursacht.
HTH, mfg
Thomas
echo $begrüßung;
[...] Zeilenumbrüche erfolgen nur durch \n.
Und genau da könnte der Hund begraben sein.
Hast Du es schon mit \r\n probiert?
Das wäre nämlich die Standard-Schreibweise gemäss
http://www.php.net/manual/de/function.mail.php
Wenn man die eigenen Header mit \r\n trennt, kommt unter Unix beim MTA (sendmail und Co.) definitiv ein Mischmasch aus \n und \r\n an, denn die Funktion mail() trennt die restlichen Header und den Body mit \n. (Siehe http://cvs.php.net/viewvc.cgi/php-src/ext/standard/mail.c?annotate=1.97 ab Zeile 235). Wenn du auf die Idee kommst, an die Werte für To, Subject und die letzte Header-Zeile noch ein \r anzufügen hast du immer noch nicht durchgängig \r\n drinstehen, denn dem \n\n zur Header-Body-Trennung kannst du nur dem ersten Zeichen ein \r vorschieben.
Und sonst könntest Du mal versuchen, nur eine Header-Zeile
nach dem anderen hinzuzufügen, angefangen mit From:,
und zu schauen, welche Header-Zeile das Problem verursacht.
Ja, was anderes als Try'n'Error fällt mir auch nicht ein. Höchstens noch die üblichen Hinweise: Fehler zur Fehlersuche nicht unterdrücken (@ weglassen), Rückgabewerte der Funktionen auswerten (zumindest mit var_dump()anzeigen lassen), Kontrollausgaben der beteiligten Werte mit var_dump(). Und noch ein Hinweise: Umlaute im Betreff sind _nicht_ durch die charset-Angabe der Content-Type-Zeile abgedeckt.
echo "$verabschiedung $name";
Hello,
Und noch ein Hinweise: Umlaute im Betreff sind _nicht_ durch die charset-Angabe der Content-Type-Zeile abgedeckt.
... und müssen auch alle separat codiert werden, so wie sie angegeben wurden.
Dazu hatten wir neulich erst einen längeren Thread, in dem wir in gemeinsamer Anstrengung alles zusammengetrgen haben!
Leider ist der bei mir auch noch nicht wirklich ausgewertet und eingepflegt worden in meine Funktionen.
Hier die Links zum Themenkomplex, die ich eben noch ermitteln konnte:
http://forum.de.selfhtml.org/archiv/2008/3/t168530/#m1099721
http://forum.de.selfhtml.org/archiv/2008/3/t168235/#m1097616
http://forum.de.selfhtml.org/archiv/2008/3/t167860/
http://forum.de.selfhtml.org/archiv/2008/4/t169352/#m1106093
http://forum.de.selfhtml.org/archiv/2008/6/t173148/#m1136240
Ein harzliches Glückauf
Tom vom Berg