Stan: Umlaute im PHP-Formmailer

Hi,

habe den Einfachen PHP-Formmailer ( http://aktuell.de.selfhtml.org/artikel/php/form-mail/ ) in meine Seite eingebaut und es funktioniert soweit alles. Das einzige Problem ist, dass Umlaute und das "scharfe S" in den E-Mails nur als Fragezeichen angezeigt werden.

Wie kann ich das Problem lösen?

MfG

  1. Hallo,

    Wie kann ich das Problem lösen?

    Setz die richtigen Header.

      
    $header = "Content-type: text/plain; charset=ISO-8859-1\n";  
    $header .= "Content-Transfer-Encoding: 8bit\n";  
    
    

    Grüße, Matze

    1. Hello,

      Setz die richtigen Header.

      $header = "Content-type: text/plain; charset=ISO-8859-1\n";
      $header .= "Content-Transfer-Encoding: 8bit\n";

        
      War das jetzt nur als Beispiel gedacht?  
      Was ist, wenn seine Daten schon in UTF-8 codiert aus dem Frontend kommen?  
        
        
        
      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 :-)  
        
      ![](http://bitworks.de/~selfHTML/Virencheck.gif)  
      
      
      1. Hallo,

        War das jetzt nur als Beispiel gedacht?

        ja :)
        Ich weiß ja nicht wie seine Daten aussehen und ob er text/plain versenden will.
        Wirklich nur das erste Beispiel welches mir eingefallen ist.

        Grüße, Matze

    2. $header = "Content-type: text/plain; charset=ISO-8859-1\n";
      $header .= "Content-Transfer-Encoding: 8bit\n";

        
      Danke, aber wo genau füge ich das ein? Es hat immernoch nicht geklappt.
      
      1. Hallo,

        Danke, aber wo genau füge ich das ein? Es hat immernoch nicht geklappt.

        Für den Fall, dass mein Beispiel bei dir zutrifft z.b. so:

          
        $mailtxt = 'Meine tolle Mail mit Umlauten (aber nicht in dem Satz :P';  
        $empfaenger = 'Empfängermailadresse';  
        $betreff = 'Betreffzeile';  
        $header = "MIME-Version: 1.0\n";  
        $header .= "Content-type: text/plain; charset=ISO-8859-1\n";  
        $header .= "Content-Transfer-Encoding: 8bit\n";  
        $header .= 'From: Name <Absenderadresse>\n";  
        mail($empfaenger, $betreff, $mailtxt, $header);  
        
        

        Grüße, Matze

        1. Hallo,

          $header = "MIME-Version: 1.0\n";

          in der Regel sollte man übrigens \r\n verwenden, statt nur \n.
          War auch nur ein Beispiel ;)

          Grüße, Matze

        2. $mailtxt = 'Meine tolle Mail mit Umlauten (aber nicht in dem Satz :P';
          $empfaenger = 'Empfängermailadresse';
          $betreff = 'Betreffzeile';
          $header = "MIME-Version: 1.0\n";
          $header .= "Content-type: text/plain; charset=ISO-8859-1\n";
          $header .= "Content-Transfer-Encoding: 8bit\n";
          $header .= 'From: Name <Absenderadresse>\n";
          mail($empfaenger, $betreff, $mailtxt, $header);

            
          Sorry, aber ich verstehe es nicht.  
          Ich habe das hier benutzt und einfach meine Daten eingefügt:  
            
          ~~~php
            
          <?php  
            
          ### Konfiguration ###  
            
          # Bitte passen Sie die folgenden Werte an, bevor Sie das Script benutzen!  
            
          # An welche Adresse sollen die Mails gesendet werden?  
          $strEmpfaenger = 'IhrName@provider.xy';  
            
          # Welche Adresse soll als Absender angegeben werden?  
          # (Manche Hoster lassen diese Angabe vor dem Versenden der Mail ueberschreiben)  
          $strFrom       = '"Formmailer" <IhrAndererName@provider.xy>';  
            
          # Welchen Betreff sollen die Mails erhalten?  
          $strSubject    = 'Feedback';  
            
          # Zu welcher Seite soll als "Danke-Seite" weitergeleitet werden?  
          # Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben!  
          $strReturnhtml = 'http://www.provider.xy/IhrName/IhreSeite.htm';  
            
          # 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;  
          }  
            
          ?>  
          
          

          Ich kann da aber keine Stelle finden, wo das, was du gepostet hast Sinngemäß hineinpassen würde.

          1. Hallo,

            $empfaenger = 'Empfängermailadresse';

              
            ist gleich  
              
            
            > $strEmpfaenger = 'IhrName@provider.xy';  
              
            
            > > ~~~php
              
            
            > > $header .= 'From: Name <Absenderadresse>\n";  
            > > 
            
            

            ist gleich

            $strFrom       = '"Formmailer" IhrAndererName@provider.xy';

            Nur das dein Skript hier nicht ausreichend Headerdaten sendet.
            Deshalb habe ich den Header in meinem Beispiel "erweitert":

            $header = "MIME-Version: 1.0\r\n";
            $header .= "Content-type: text/plain; charset=ISO-8859-1\r\n";
            $header .= "Content-Transfer-Encoding: 8bit\r\n";
            $header .= "From: Name <Absenderadresse>\r\n";

            Grüße, Matze

            1. Hello,

              $strFrom       = '"Formmailer" IhrAndererName@provider.xy';

              Nur das dein Skript hier nicht ausreichend Headerdaten sendet.
              Deshalb habe ich den Header in meinem Beispiel "erweitert":

              $header = "MIME-Version: 1.0\r\n";
              $header .= "Content-type: text/plain; charset=ISO-8859-1\r\n";
              $header .= "Content-Transfer-Encoding: 8bit\r\n";
              $header .= "From: Name <Absenderadresse>\r\n";

              Auch in diesem Thread sollte nicht unerwähnt bleiben, dass alle Daten, die in die Header einer mail aufgenommen werden, genauestens überprüft werden müssen, wenn man keine Spamschlueder bauen will.

              siehe Thread https://forum.selfhtml.org/?t=162929&m=1060571

              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 :-)

            2. Habe jetzt einfach

                
               mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom)  
                or die("Die Bestellung konnte nicht abgeschickt werden. Bitte bestelle per E-Mail an: stencildruck@no-log.org");  
               header("Location: $strReturnhtml");  
               exit;  
              
              

              durch

                
               mail($strEmpfaenger, $strSubject, $strMailtext, "MIME-Version: 1.0\nContent-type: text/plain; charset=ISO-8859-1\nContent-Transfer-Encoding: 8bit\nFrom: ".$strFrom)  
                or die("Die Bestellung konnte nicht abgeschickt werden. Bitte bestelle per E-Mail an: stencildruck@no-log.org");  
               header("Location: $strReturnhtml");  
               exit;  
              
              

              ersetzt und es geht jetzt!

              Danke euch beiden.

              1. Hallo,

                mail($strEmpfaenger, $strSubject, $strMailtext, "MIME-Version: 1.0\nContent-type: text/plain; charset=ISO-8859-1\nContent-Transfer-Encoding: 8bit\nFrom: ".$strFrom)

                  
                du solltest noch \n durch \r\n ersetzen.  
                  
                
                > Danke euch beiden.  
                  
                Bitte bitte.  
                  
                Grüße, Matze
                
                1. Hello,

                  Danke euch beiden.

                  Bitte bitte.

                  ebenfalss gerne geschehen.

                  Es war aber erst der erste teil Deiner Aufgabe.
                  Der zweite ist, sicherzustellen, dass die Daten auch in der jetzt angegebenen Codierung vom Client (also aus dem Formular) kommen. Du musst den Browser also dazu auffordern, bitte die passende Codierung zu benutzen.

                  Dann müssen Deine annderen Komponenten (Webserver, Datenbank, Editor, ...) sich aber auch daran halten.

                  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. Hallo Tom,

                    Es war aber erst der erste teil Deiner Aufgabe.
                    Der zweite ist...
                    Dann müssen Deine annderen Komponenten (Webserver, Datenbank, Editor, ...) sich aber auch daran halten.

                    es ist schon ein Elend mit den Codierungen ;)

                    Grüße, Matze

      2. Hello,

        $header = "Content-type: text/plain; charset=ISO-8859-1\r\n";
            $header .= "Content-Transfer-Encoding: 8bit\r\n";

          
        Header mit \r\n abschließen, auch wenn PHP das intern teilweise ggf. wieder kaputt macht.  
        Irgendwann werden sie mail() auch RFC-konfomt implementiert haben...  
          
        <http://de.php.net/manual/en/function.mail.php>  
          
        in die "additional headers"  
          
          
          
        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 :-)  
          
        ![](http://bitworks.de/~selfHTML/Virencheck.gif)  
        
        
  2. Hello,

    habe den Einfachen PHP-Formmailer ( http://aktuell.de.selfhtml.org/artikel/php/form-mail/ ) in meine Seite eingebaut und es funktioniert soweit alles. Das einzige Problem ist, dass Umlaute und das "scharfe S" in den E-Mails nur als Fragezeichen angezeigt werden.

    Wie kann ich das Problem lösen?

    Indem Du Dich mit Codierung und MIME-Mail auseinandersetzt.
    Mach Dir als erstes einen Plan, in welcher Codierung Deine Daten wann und wo vorliegen, dann überlege, in welcher Codierung sie per Mail übertragen werden sollen und wie Du den MTA-"Hops" und dem Empfänger das mitteilen willst.

    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 :-)