Rene: Mal wieder: Umlaute und ß in Mail-Funktion

Hi,
ich sitze schon etliche Stunden vor meinem Problem. Ich habe gegockelt und etliche Foren durchforstet, vieles ausprobiert, aber keine Lösung gefunden.

Folgendes:
Ich habe eine Datei "kontakt.htm" mit der META-Angabe <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">. In diese Datei bette ich in den <body> per require ein Kontaktformular ein:

require("../kontaktformular.php");

Das Kontaktformular ruft nach dem Submit die Datei "kontaktformularauswertung.php" auf

<form action="../kontaktformularauswertung.php" method="post">

Die Datei "kontaktformularauswertung.php" hat ebenfalls die META-Angabe <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">. Im <body> dieser Datei wird eine Mail-Funktion ausgeführt, um die Anfrage an eine Mail-Adresse zu versenden

mail($email, $subject, $content, $header);

In der versendeten Mail wird der Betreff $subject korrekt angezeigt. Der Mailbody $content zeigt statt der Umlaute und des Buchstabens ß Fragezeichen an.

Folgende Header habe ich bereits ausprobiert:
$header = "From: $visitor_email\nContent-Type: text/plain;\nReply-To: $visitor_email\nX-Mailer: PHP/" . phpversion();

$header = "From: $visitor_email\nContent-Type: text/plain;  charset=ISO-8859-1\nReply-To: $visitor_email\nX-Mailer: PHP/" . phpversion();

$header = "From: $visitor_email\nReply-To: $visitor_email\nX-Mailer: PHP/" . phpversion();

header = "From: $visitor_email\nReply-To: $visitor_email\nContent-Type: text/plain; charset=ISO-8859-1\nX-Mailer: PHP/" . phpversion();

$header = "Mime-Version: 1.0\r\nContent-Type: text/plain; charset=ISO-8859-1\r\n";

$header = "Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable";

Ebenfalls habe ich UTF-8 ausprobiert, mit entsprechenden Headern für die Mail-Funktion und die META-Angabe in der Datei "kontaktformularauswertung.php".

Die per POST übergebenen Daten lasse ich mir in einem unsichtbaren (nur HIDDEN-Felder) Formular im <body> der Datei "kontaktformularauswertung.php" ausgeben. Dort werden die Umlaute und das ß korrekt im Quelltext angezeigt.

Mein Mailprogramm "Thunderbird" ist auf "Westlich (ISO-8859-1)" eingestellt.

Welcher Header verursacht mir nur soviel headache?

  1. Hallo,

    überleg doch mal daran in welcher Form iso-8859-1 Vokale und Sonderzeichen kodiert. Danach in welcher Form es utf8 tut.
    Wenn du alles auf Kyrilisch stellen würdest, würdest du dich doch auch nicht wundern wenn keine latainischen Buchstaben ausgegeben werden oder?

    Grüße, Matze

    1. Hallo,

      sorry, ich hatte den Satz "Ebenfalls habe ich UTF-8 ausprobiert..." überlesen.

      Grüße, Matze

  2. Hello,

    Folgende Header habe ich bereits ausprobiert:
    $header = "From: $visitor_email\nContent-Type: text/plain;\nReply-To: $visitor_email\nX-Mailer: PHP/" . phpversion();

    $header = "From: $visitor_email\nContent-Type: text/plain;  charset=ISO-8859-1\nReply-To: $visitor_email\nX-Mailer: PHP/" . phpversion();

    $header = "From: $visitor_email\nReply-To: $visitor_email\nX-Mailer: PHP/" . phpversion();

    header = "From: $visitor_email\nReply-To: $visitor_email\nContent-Type: text/plain; charset=ISO-8859-1\nX-Mailer: PHP/" . phpversion();

    $header = "Mime-Version: 1.0\r\nContent-Type: text/plain; charset=ISO-8859-1\r\n";

    Wieso nun hier plötzlich "\r\n"?

    Sas wäre bei ALLEN Headern richtig!

    $header = "Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable";

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  3. Ich Idiot! Vor lauter Testerei habe ich übersehen, dass ich sämtliche POST-Variablem mit utf8_decode umgewandelt habe.

    Mit folgendem Header funktioniert es jetzt:

    $header = "From: $visitor_email\nContent-Type: text/plain;  charset=ISO-8859-1\nContent-Transfer-Encoding: 8bit\nReply-To: $visitor_email\nX-Mailer: PHP/" . phpversion();

    Danke für Eure Hilfe!

    1. Hello,

      Ich Idiot! Vor lauter Testerei habe ich übersehen, dass ich sämtliche POST-Variablem mit utf8_decode umgewandelt habe.

      Mit folgendem Header funktioniert es jetzt:

      $header = "From: $visitor_email\nContent-Type: text/plain;  charset=ISO-8859-1\nContent-Transfer-Encoding: 8bit\nReply-To: $visitor_email\nX-Mailer: PHP/" . phpversion();

      Denke aber trotzdem an den Abschluss jeder Headerzeile mit "\r\n"
      Das ist vorgeschrieben und manche MTA's nehmen das auch sehr ernst.
      Du weißt ja nie, wieviele Stationen Deine Mail durchlaufen muss.

      Harzliche Grüße vom Berg
      http://bergpost.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

      1. echo $begrüßung;

        Denke aber trotzdem an den Abschluss jeder Headerzeile mit "\r\n"
        Das ist vorgeschrieben und manche MTA's nehmen das auch sehr ernst.

        Dieses Strengdraufachten kann man sich im Prinzip schenken, denn PHP macht es intern wieder zunichte, weil es da einfach \n beim Zusammenbau von To, Subject, den zusätzlichen Headerzeilen und dem Mail-Body verwendet. Siehe http://cvs.php.net/viewvc.cgi/php-src/ext/standard/mail.c?annotate=1.96 - Zeile 235ff. (Dass \n hier wirklich nur für das Linefeed steht, kann man weiter oben in Zeile 48 sehen, denn da wird es ebenfalls und zusammen mit dem \r verwendet. An der Stelle wäre es nicht sehr sinnig, wenn \n für CRLF stünde.)

        Nähme PHP im Code der mail()-Funktion \r\n zum Zusammenbau, wäre das auch kontraproduktiv zur Handbuchempfehlung "If messages are not received, try using a LF (\n) only. Some poor quality Unix mail transfer agents replace LF by CRLF automatically (which leads to doubling CR if CRLF is used)."

        Möchte man also unter allen Umständen stets \r\n verwenden, muss man To und Subject auf \r enden lassen und den letzten Zusatzheader (oder das Subject, wenn man keine verwendet) mit \r\n\r abschließen. Somit hat man dann zumindest ein \r\n\r\n\n als Trenner. Wie sich allerdings das zusätzliche \n auf die MTAs auswirkt weiß ich nicht. Vermutlich erzeugt das nur eine Leerzeile am Anfang des Mailtexts.

        echo "$verabschiedung $name";

        1. Hello,

          Dieses Strengdraufachten kann man sich im Prinzip schenken, denn PHP macht es intern wieder zunichte, weil es da einfach \n beim Zusammenbau von To, Subject, den zusätzlichen Headerzeilen und dem Mail-Body verwendet. Siehe http://cvs.php.net/viewvc.cgi/php-src/ext/standard/mail.c?annotate=1.96 - Zeile 235ff.

          Die Beschreibung ist mir neu.

          Das erklärt aber einige Probleme, die ich hier noch auf dem Stapel habe "zur gelegentlichen Untersuchung" ...

          Harzliche Grüße vom Berg
          http://bergpost.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)