Michael P.: Sendmail mit §_POST - Umlaute vermeiden

Hallo,
vll. kann mir von Euch jemand helfen!

Das Mailformular generiert bei Eingabe von Text mit Umlauten leicht kryptische Mails.

<?php

Konfiguration

Bitte passen Sie die folgenden Werte an, bevor Sie das Script benutzen!

An welche Adresse sollen die Mails gesendet werden?

$strEmpfaenger = 'emailempfaenger';

Welche Adresse soll als Absender angegeben werden?

(Manche Hoster lassen diese Angabe vor dem Versenden der Mail ueberschreiben)

$strFrom       = '"SENDMAIL" <emailabsender>';

Welchen Betreff sollen die Mails erhalten?

$strSubject    = 'emailbetreff';

Zu welcher Seite soll als "Danke-Seite" weitergeleitet werden?

Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben!

$strReturnhtml = 'urlweiterleitung';

Welche(s) Zeichen soll(en) zwischen dem Feldnamen und dem angegebenen Wert stehen?

$strDelimiter  = ":\t";

Ende Konfiguration

if($_POST)
{
 $strMailtext = "";

while(list($strName,$value) = each($_POST))
 {
  if(is_array($value))
  {
   foreach($value as $value_array)
   {
    $strMailtext .= $strName.$strDelimiter.$value_array."\n";
   }
  }
  else
  {
   $strMailtext .= $strName.$strDelimiter.$value."\n";
  }
 }

if(get_magic_quotes_gpc())
 {
  $strMailtext = stripslashes($strMailtext);
 }

mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)
  or die("Die Mail konnte nicht versendet werden.");
 header("Location: $strReturnhtml");
 exit;
}

?>

Wenn ins Formular Daten eingegeben werden kommt z. B. folgende Mail:

From: "SENDMAIL" <emailabsender>
To: <emailempfaenger>
Sent: Thursday, January 10, 2008 4:03 PM
Subject: emailbetreff

Name: testname
Strasse: teststr.
Ort: PLZ Oberkrämer
E-Mail: emailaddy
Telefon: telnr
Kinder: 3 (3-2-7)
Zeit: 03.02.-08.08.2008 (evtl. bis 4.10.)
Nachricht: Vielen Dank für alles.
Wir freuen uns auf die Zeit.
Bitte um Bestätigung.
GrüÃYe - Name
kontakt: email

Wie kann ich das ganze lösen und die kryptischen Zeichen durch die richtigen Umlaute ersetzen!?

Bitte um HIlfe.

  1. echo $begrüßung;

    Das Mailformular generiert bei Eingabe von Text mit Umlauten leicht kryptische Mails.

    Das ist daran nicht schuld. Es ist auch nicht kryptisch, nur falsch interpretiert.

    From: "SENDMAIL" <emailabsender>
    To: <emailempfaenger>
    Sent: Thursday, January 10, 2008 4:03 PM
    Subject: emailbetreff

    Hier ist keine Angabe enthalten, in welcher Kodierung die Maildaten vorliegen.

    Ort: PLZ Oberkrämer

    Es scheint so, dass deine Seite UTF-8-kodiert ist.

    Wie kann ich das ganze lösen und die kryptischen Zeichen durch die richtigen Umlaute ersetzen!?

    Die kryptischen Zeichen sind richtige Umlaute, nur gemäß UTF-8 kodiert. Du kannst deine Seite umstellen, was sicher nicht die beste Idee ist. Sie nach ISO-8859-1 umzuwandeln auch nicht unbedingt, weil dir dabei Zeichen verlorengehen können, die nicht in ISO-8859-1 enthalten sind. Wenn du der Mail einen Content-Type-Header spendierst, sollte der Empfänger die Byte-Sequenzen korrekt interpretieren.

    Content-Type: text/plain;charset=UTF-8

    Gegebenendalls sind noch weitere Besonderheiten beim Erstellen einer Mail zu beachten, doch moderne Mail-Clients sollte auch so schon zurecht kommen.

    echo "$verabschiedung $name";

    1. Es scheint so, dass deine Seite UTF-8-kodiert ist.

      ja genau!

      Content-Type: text/plain;charset=UTF-8

      wo muss ich diese codezeile einfügen? wo wird der mailheader in obigem script zusammengesetzt!? bin ein php-idiot :-/
      vielen dank für deine hilfe!!

      1. echo $begrüßung;

        Content-Type: text/plain;charset=UTF-8
        wo muss ich diese codezeile einfügen? wo wird der mailheader in obigem script zusammengesetzt!? bin ein php-idiot :-/

        $strFrom       = '"SENDMAIL" <emailabsender>' . "\nContent-Type: text/plain;charset=UTF-8";

        echo "$verabschiedung $name";

        1. Moin!

          echo $begrüßung;

          Content-Type: text/plain;charset=UTF-8
          wo muss ich diese codezeile einfügen? wo wird der mailheader in obigem script zusammengesetzt!? bin ein php-idiot :-/

          $strFrom       = '"SENDMAIL" <emailabsender>' . "\nContent-Type: text/plain;charset=UTF-8";

          Hinzuzufügen ist noch, dass diese Content-Type-Angabe nur für den Body der Mail gilt, nicht jedoch für die Header. Doch dummerweise ist üblicherweise das Subject sowie Namensangaben von Empfänger oder Sender auch gerne von UTF-8-Datentum betroffen.

          Es gibt für Header eine spezielle Codierungsmethode, damit das leider auf 7 Bit ausgelegte Mailsystem mit 8-Bit-Zeichen und schlimmerem zurechtkommt.

          Wenn ein String für den Mailheader als korrektes UTF-8 vorliegt, hilft diese Funktion:

            function _encode_header($header)  
            {  
              return "=?utf-8?b?".base64_encode($header)."?=";  
            }
          

          Wichtig: Der Headerbezeichner (wie "Subject:", "To:", "Cc:" etc.) darf nicht mit bearbeitet werden. Der muß im Klartext bleiben, damit die Mailserver erkennen, was da eigentlich codiert wird.

          - Sven Rautenberg

          --
          "Love your nation - respect the others."