Wieder das leidige Thema "Umlautdarstellung in eMails"

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wieder das leidige Thema "Umlautdarstellung in eMails"

    Hey Leute,

    Ich weiß, das Thema ist oft und in unterschiedlichen Foren diskutiert worden.
    Ich habe es selbst hier vorm kurzem gepostet, habe aber leider keine Lösung
    bekommen. Ich poste das Problem nochmals und hoffe, endlich einen
    brauchbaren Hinweis oder gar eine Lösung von jemandem zu bekommen.

    Mit dem Submit-Button werden zwei Emails abgeschickt. Eines an mich, in
    welchem die Anfrage des Absenders enthalten ist. Das zweite Email ist
    eine
    Bestätigung, die an den Email-Absenders ergeht und teilt ihm mit,
    dass
    sein Anfrage-Mail an mich verschickt worden ist.

    Der Email-Inhalt besteht aus zwei Datenarten: Einem konstanten, in der
    PHP-Datei als Nachricht an den Absender kodierten Text, und zum anderen
    aus Textdaten, die der Email-Absender im Formular eingegeben hatte.

    In dem konstanten Text, der fix in der PHP-Datei kodiert ist, schreibe ich
    die deutschen Umlaute in HTML-Codes (z.B.: ü = & uuml). Auf die
    Formularfelder, die der Anfrage-Absender im Formular eingibt, habe ich
    keinen Einfluss. Diese können auch Umlaute enthalten.

    NUN DIE PROBLEME
    ==============

    Problem Nr. 1:
    Der konstante Text kommt in dem Bestätigungsmail an den Anfrage
    Absender richtig an. Die Umlaute werden als Solche richtig dargestellt.
    Nur die Daten, die vom Kunden in das Formular eingegeben wurden,
    werden falsch dargestellt. Ich habe alle nur erdenklichen Varianten und
    Möglichkeiten probiert, aber vergeblich; die Umlaute werden als wirres
    Zeichen gezeigt. Ich bin mit meinem Latein am Ende. Wer kann mir helfen?

    Problem Nr. 2:
    Auf dieser Art versendete Emails werden von manchen Mailservern (z.B.
    von GMX) als Spam vermutet und direkt in den Spamordner abgelegt und
    nicht im Posteingangsordner.

    Hier der Code:

    Datei: mailversand.php

    PHP-Code:
    <?php
    /* Empfaenger */
    $to  $email// Kundeneingabe in das Formular

    /* Weitere Daten */
    $datum date("d.m.Y") . "/" date("H:i");
    $buero  "buero@uebrsetzung.de";

    /* Betreff */
    $betreff "Übersetzung / " $dokument
    //Übersetzung ist konstant; Variable '$dokument' ist eine Eingabe
    //aus dem Formular. Der Inhalt kann sein: Reisepaß + Führerschein

    /* 1. Email - Nachricht an den Kunden*/
    $message '
    <html>
    <head>
    <title> Übersetzung </title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    //auch mit "charset=iso-8859-1" probiert
    </head>
    <body>
    '
    ;

    $message .='<table><tr><td>'.$firma.'<br></tr></td>';
    $message .='<tr><td>'.$anrede.' '.$titel.' '.$vorname.' ';
    $message .=.$nachname.'<br></td></tr>';
    $message .='<tr><td>'.$strasse.'<br></td></tr>';
    $message .='<tr><td>'$plz.' '.$ort.'<br><br><tr><td>';
    $message .='<tr><td>';
    $message .=.$sehr.' '.$anrede.' '.$titel.' '.$nachname.' ';
    $message .='<br><br></td></tr>';
    /*
    jetzt kommt mein konstant kodierter Text. Dieser Text kommt
    richtig mit umgewandelten Umlauten und anderen Sonderzeichen
    beim Empfänger an, egal ob ich die Umlaute als sloche ausschreibe
    oder in kodierter Form.
    */
    $message .='<tr><td>Vielen Dank f&uuml;r Ihre Anfrage. Wir werden';
    $message .='Sie bald kontaktieren und Ihnen einen unverbindlichen';
    $message .='Kostenvoranschlag machen.<br><br>Bis dahin verbleiben';
    $message .='wir mit freundlichen Gr&uuml;ssen,<br><br>';
    $message .='Ihr GlobTrans-Team<br><br></td></tr>';
    $message .='<tr><td>Berlin, am '.$datum.'</td></tr>';
    $message .='-------------------------------------------------<br>';
    $message .='</body></html>';

    /*
    2. Email – Anfrage des Kunden an mich. All diese Angaben, die der
    Kunde über Formular ausfüllt und an mich abschickt, kommen
    nicht richtig an. Die Umlaute werden nicht dargestellt. Ebenfalls
    die Formulardaten aus dem 1. Mail
    */
    $order '
    <html>
    <head>
    <title>Uebersetzung</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    //auch "charset=8859-1" probiert
    </head>
    <body>
    '
    ;

    $order .= '
    <table><tr>  <td>Folgende Info-Anforderung wurde am '
    .$datum.
    abgeschickt:<br><br></td></tr>'
    ;
    $order .= '<tr> <td>Firma: '.$firma.'<br></td></tr>';
    $order .='<tr><td>Anrede/Titel/Name: '.$anrede.' '.$titel.' ';
    $
    0rder .=.$vorname.' '.$nachname.'<br></td></tr>';
    $order .='<tr><td>Strasse: '.$strasse.'<br></td></tr>';
    $order .='<tr><td>PLZ/Ort: '.$plz.' '.$ort.'<br></td></tr>';
    $order .='<tr><td>Land: '.$land.'<br></td></tr>';
    $order .='<tr><td>Telefon: '.$telefon.'<br></td></tr>';
    $order .='<tr><td>Fax: '.$fax.'<br></td></tr>';
    $order .='<tr><td>Handy: '.$mobil.'<br></td></tr>';
    $order .='<tr><td>E-Mail: '.$email.'<br></td></tr>';
    $order .='<tr><td>EU_Steuer Nr.: '.$eust.'<br></td></tr>';
    $order .='<tr><td>Geburtsdatum: '.$gebdat.'<br></td></tr>';
    $order .='<tr><td>Dokumentart: '.$dokument.'<br></td></tr>';
    $order .='<tr><td>Anzahl Zeilen: '.$zeilen.'<br></td></tr>';
    $order .='<tr><td>Quellsprache: '.$qsprache.'<br></td></tr>';
    $order .='<tr><td>Zielsprache: '$zsprache.'<br></td></tr>';
    $order .='<tr><td>Beglaubigung: '.$beglaubigt.'<br></td></tr>';
    $order .='<tr><td>Beschreibung: '.$beschreibung;
    $order .='<br></td></tr>';
    $order .='<tr><td>Erreichbar von: '.$zeit_von .' bis  ';
    $order .=.$zeit_bis .'<br></td></tr>';
    $order .='<tr><td>Mitteilung:<br>'.$beschreibung.'<br></td></tr> ';
    $order .='<tr><td>- Ende der automatisch generierten eMail - <br>';
    $order .='</td></tr>';
    $order .='</table></body></html>
    '
    ;

    /* Einstellung des Header-Bereichs für das Mail an den Kunden*/
    $headers_gw  "MIME-Version: 1.0\r\n";
    $headers_gw .= "Content-type: text/html; charset=iso-8859-15\r\n";
    $headers_gw .= "Content-type: text/html; charset=utf-8\r\n";
    // $headers_gw .= "Content-Transfer-Encoding: 8bit\r\n";

    /* zusätzliche Header */
    $headers_gw .= "To: ".$to."\r\n";
    $headers_gw .= "From: ".$absender."\r\n";
    $headers_gw .= "CC: \r\n";
    $headers_gw .= "BCC: \r\n";

    /* Header für das Kunden-Email an mich */
    $headers_ku  "MIME-Version: 1.0\r\n";
    $headers_ku .= "Content-type: text/html; charset=iso-8859-15\r\n";
    $headers_ku .= "Content-type: text/html; charset=utf-8\r\n";

    /* zusaetzliche Header für das unden-Email an mich*/
    $headers_ku .= "To: ".$globweb."\r\n";
    $headers_ku .= "From: ".$to."\r\n";
    $headers_ku .= "CC: \r\n";
    $headers_ku .= "BCC: \r\n";

    /* Verschicken der Mail */
    @mail($buero,$betreff,$order,$headers_ku);
    @
    mail($to,$betreff,$message,$headers_gw);
    }
    ?>
    NUN: Alle Daten, die aus den Formulareingaben stammen, kommen falsch
    an. Die Umlaute werden nicht angezeigt, und zwar so:

    ö wird als ‚ Ã’ angezeigt (König = KÃnig)
    ä wird als ‚ä’ angezeigt (zusätzlich = zusätzlich)
    ü wird als ‚ü’ angezeigt (Führerschein = Führerschein)
    ß wird als ‚Ã’ angezeigt (Reisepaß = ReisepaÃ)

    BITTE UM EURE LÖSUNGSVORSCHLÄGE! ABER BITTE KEINE POLEMISCHEN
    DISKUSIONEN, SONDERN LÖSUNGEN.

    DANKE AN ALLE IM VORAUS.
    Zuletzt geändert von Armadi; 04.04.2005, 00:21.

  • #2
    code umbrechen, die leute hier scrollen nich so gerne!

    ich übrigens auch nicht.

    Kommentar


    • #3
      danke! Ich werde es korrigieren.

      Kommentar


      • #4
        ich würd den nochmal umbrechen. ich hab immer noch nen scrollbalken.

        Kommentar


        • #5
          Also, ich habe alles Mögliche probiert und mehrmals umgebrochen, aber es gelingt mir nicht, diesen Scroll nach rechts zu beseitigen. Es tut mir Leid.

          Kommentar


          • #6
            0. viel besser!
            1. doppelte header gehen schonmal gar nicht klar (charset und content-type). wenn's aber eine html-mail ist, warum kodierst du nicht alles fleißig mit htmlentities()?
            2. suchen macht ************y.

            Kommentar


            • #7
              penizillin:

              htmlentities() hatte ich schon. Das Eergebnis wird dann im Email in HTML-Codes angezeigt.

              Beispiel:

              ORIGINAL:
              $eingabe_aus_formular = "Ich schreibe 'ä Ä ö Ö' und verschicke sie.";
              $eingabe_aus_formular = htmlentities($eingabe_aus_formular);

              AUSGABE im Email:
              PHP-Code:
              Ich schreibe '&auml; &Auml; &ouml; &Ouml;' und verschicke sie

              Kommentar


              • #8
                PHP-Code:
                <meta http-equiv="content-type" content="text/html; charset=utf-8"
                Gibt der Kunde unter diesem Header seine Daten ein ?
                Wenn ja dann dürfte dein Problem in der Codierung der Zeichen liegen. Denn wenn der Kunde ein ü eingibt, dann muss dieses gemäss deinem
                Header in utf-8 enthalten sein --> ist es nicht --> wird falsch codiert
                Wie bereits erwähnt wurde solltest du htmlentities() verwenden.
                Und zwar mal so probieren:
                PHP-Code:
                htmlentities('string to be encoded''utf-8'); 
                Allenfalls musst du auch ein 2. Komma zwischen den String und den
                Zeichensatz setzen (da ein Argument ausgelassen wird)
                Wenn du die Message in utf-8 codiert hast, dann sollte es auch keine
                Probs mehr mit der Mail geben.

                Gruss

                tobi
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  Re: Wieder das leidige Thema &quot;Umlautdarstellung in eMails&quot;

                  Original geschrieben von Armadi
                  Problem Nr. 2:
                  Auf dieser Art versendete Emails werden von manchen Mailservern (z.B. von GMX) als Spam vermutet und direkt in den Spamordner abgelegt und nicht im Posteingangsordner.
                  Ein Merkmal vieler Spam-Mails ist es, daß sie nur einen HTML-Teil haben, aber keinen als Plain Text. Wenn ich dein Skript richtig deute, wird der gesamte Inhalte deiner Mail nur in HTML ausgegeben, nicht aber als Text vorneweg.

                  Kommentar


                  • #10
                    Hi,

                    versuch mal die Mail Klasse von phpguru.org:
                    http://www.phpguru.org/static/mime.mail.html

                    Vereinfacht vieles und damit sollte es auch funktionieren.

                    Grüsse

                    Kommentar


                    • #11
                      Zuerst herzlichen Dank an alle. Und nun meine Antwort:

                      Javlives:
                      Gibt der Kunde unter diesem Header seine Daten ein ?
                      Wenn ja dann dürfte dein Problem in der Codierung der Zeichen liegen. Denn wenn der Kunde ein ü eingibt, dann muss dieses gemäss deinem
                      Header in utf-8 enthalten sein --> ist es nicht --> wird falsch codiert.
                      Nein. Der Kunde gibt die Daten unter folgendem Header:
                      <META http-equiv="content-type" content="text/html; charset=iso-8859-1">


                      Ich habe aber in der Zwischenzeit die Lösung gefunden. Und zwar werden
                      die über das Formular eingegeben Daten automatisch in UTF8 kodiert (utf8_encode($eingabe). Ich weiß nicht warum?). Da muß man Sie wieder dekodieren (mit $eingabe = utf8_decode($eingabe)).
                      So funktioniert es jetzt und die Daten kommen nun richtig an.


                      Stetic:
                      Danke für den Hinweis auf die Mailklasse von phpguro. Ich werde deinen Rat zu Herzen nehmenund sehe mir die Site sicher an. Denn jedes zusätzliche Wissen bringt einen bei solchen Problemen einen Schritt weiter.


                      Maschenka:
                      Sie haben Recht Maschenka. Ich habe in meiner Mail nur einen HTML-Teil
                      und keinen PlainText. UND Das will ich nicht. Ich will nicht, dass der gesamte Inhalt meiner Mail nur in HTML ausgegeben wird, sondern auch als Text vornewe.
                      ALLERDINGS weiß ich nicht, wie das geht.
                      Wäre nett, wenn Sie mir beschreiben würden, wie das gemacht wird.

                      Danke
                      Zuletzt geändert von Armadi; 04.04.2005, 23:41.

                      Kommentar


                      • #12
                        Original geschrieben von Armadi
                        Maschenka:
                        Sie haben Recht Maschenka. Ich habe in meiner Mail nur einen HTML-Teil
                        und keinen PlainText. UND Das will ich nicht. Ich will nicht, dass der gesamte Inhalt meiner Mail nur in HTML ausgegeben wird, sondern auch als Text vornewe.
                        ALLERDINGS weiß ich nicht, wie das geht.
                        Wäre nett, wenn Sie mir beschreiben würden, wie das gemacht wird.
                        Ich habe keine Ahnung, wie das gemacht wird, da ich noch nie das Bedürfnis hatte, welche zu verschicken. Aber wenn ich mir den Link von stetic ansehe, dann vermute ich, daß entweder in "HTML-email" gleich ein Plain-Text-Part enthalten ist oder daß man mit ein wenig Geschick "HTML-email" und "Text-email" kombinieren kann.

                        Kommentar


                        • #13
                          du mußt eine Mime Mail erzeugen, welche aus mehreren Teilen besteht

                          z.B.

                          1. Plain/Text
                          2. Html
                          3. Dateianhang
                          4. Dateianhang
                          5. ...
                          TBT

                          Die zwei wichtigsten Regeln für eine berufliche Karriere:
                          1. Verrate niemals alles was du weißt!


                          PHP 2 AllPatrizier II Browsergame

                          Kommentar

                          Lädt...
                          X