UTF 8 Problem mit E-Mail

  • Von User Alien :



    Hallo!

    ich hoffe ich bin hier richtig und bitte um Hilfe. Ich habe eine Webseite mit Login und Passwort vergessen. Die Seite funktioniert auch super. Aber die mail zur Passwortänderung kommt nicht utf-8 codiert an. Utf-8 ist überall integriert, In der Datenbank wird es auch richtig angezeigt. Sogar im Betreff der Mail, aber nicht im Text. Beantworte ich den Text, kommt die Mail mit utf-8 codierung ordentlich zurück. Ich habe versucht, dem Beispiel zu folgen das ich hier gefunden habe:

    mail('service@dietotenkoepfe.de', 'utf8 test title ÄÖ', 'nachricht ÖÄÜ€&%#+!()?ß<>' , 'From: noreply@dietotenkoepfe.de ' . "\n" . 'Content-Type:text/plain; charset="UTF-8"');


    Das funktioniert auch, aber dann hab ich nicht mehr die Anrede und den Link. Vielleicht kann mir jemand weiterhelfen, wie ich den Code richtig einsetzen muss, ich bekomme es einfach nicht hin.

    Dankeschön.

    Nette Grüße

    Alien

  • Von User timtim :



    Hallo Alien,


    hört sich auch für mich nach einem seltsamen verhalten an. Grund könnte sein, das sich das UTF-8 irgendwo in deinem Body-Text durch die Variablen die du generierst verändert. Du könntest versuchen alle Variablen Werte ($user['email'], $url_passwortcode) vorher mit inconv korrekt umzuwandeln.


    http://php.net/manual/de/book.iconv.php


    iconv bietet mehrere methoden, die combination "get_encoding" und in iconv zu utf-8 könnte vielleicht helfen.


    Es könnte natürlich auch eine frage des Clients sein mit dem du die Mails liest. Sind denn alle Umlaute im falschen format?



    * Weil es sonst ärger gibt: Es ist unüblich und nicht gerne gesehen, fragen an existierende Beiträge zu hängen, sondern für solche Fragen einen eigenen Beitrag zu Starten. Und ich weiß nicht ob ich jetzt eine Ermahnung bekomme weil ich darauf geantwortet habe ;).


    Grüße


    Timo

  • Von User Alien :


    Hallo Timo,

    ich hoffe nicht, das Du Ärger bekommst. Ich bin neu hier und habe nicht gefunden, wo ich eine eigene Anfrage starten kann.

    Nein, alle anderen Texte auf der Seite sind im richtigen Format, auch in der Datenbank. Wenn die passwort-vergessen mail gesendet wird, erhalte ich sie im falschen Format, beantworte ich sie, ist es richtig. Ich habe schon im head charset utf-8 eingetragen, bringt aber nichts. Dann habe ich versucht,

    'Content-Type:text/plain; charset="UTF-8"'); anzuhängen, jedesmal öffnet die Seite dann nicht mehr. Charset ISO geht auch nicht. Die Zeichen werden dann so dargestellt wie im Bild. Ich habe die vorgeschagene Lödung vit Totenköpfe ausprobiert, aber dann verschwinden der Name, der Link etc. Habe also versucht daraus etwas zu basteln, aber ich krieg es nicht hin.

    Ich rufe mails per Thunderbird ab, aber ansonsten wird immer alles richtig dargestellt. Das der Fehler nicht daran liegen kann, zeigt ja auch, das die Beantwortung dieser Mail richtig dargestellt wird.

    Danke für Deine Mühe und schnelle Antwort

    Gruß

    Alien

  • Man verwende never ever die PHP-mail() Funktion, sondern man verwende eine fertige Mailer-Klasse w.z.B. den phpMailer. Damit hat man deutlich mehr Möglichkeiten und die Wahrscheinlichkeit, dass Mails im Spamordner landen, ist sehr gering.

  • Danke! Hab ich versucht, ging aber nicht. Das Kontaktformular widerum läuft mit dem PHP-Mailer. Also hab ich den Provider gefragt und er sagte, ich müsse sendmail benutzen, Also hab ich das gemacht, es werden nun die Mails gesendet mit dem Link zur Passwotändererung, aber im Text eben nicht als utf-8. Ist zum Verzweifeln

  • Ja, wenn man wie ist es einfach. Geht sogar bei der Email-Benachrichtigung nach Fileupload, nur eben nicht mit passwortvergessen. Ich weiß nicht was ich falsch mache. Hab schon sehr viel ausprobiert. Datei ist auch in uft-8 ohne BOM abgespeichert. Das ist es auch nicht. Aber Danke!

  • Das utf-8 problem irritiert mich schon, sicher das es sich bei der Verwendung von inconv nichts ändert?


    Kannst du den gesamten PHP-Code für das Mailen hier nochmal posten? Und daran denken diesen in die CODE-Tags zu packen. Der Texteditor hier hat ein Button dafür.

  • Noch was, über das ich nicht nachgedacht habe:


    Was genau meinst du eigentlich mit dem zurücksenden? Also wie sieht genau das vorgehen aus:


    1. Passwort-Vergessen Funktion ausführen -> E-Mail in Thunderbird erhalten (mit falschem encoding) -> E-Mail weitersenden -> Empfangen -> Richtiges Encoding?


    Ich meine, vielleicht liegt es wirklich an Thunderbird der hier Probleme hat und im schlimmsten fall, der E-Mail-Server deines Anbieters.


    Grüße


    Timo

  • Danke, das Du nochmal drüber nachgedacht hast. Ich gehe also auf der Login-Seite auf Passwort vergessen, gebe meine Testmail-addy und erhalte sofort die Mail mit dem Link zum ändern des Passwortes. Diese mail ist im Betreff ok mit utf-8, aber der Text ist nicht utf-8 sondern mit den komischen Zeichen, die ich im 2. Bild geschickt habe. Also keine Fragezeichen oder Quadrate. Beantworte ich diese mail ist es richtig codiert. Ich habe mir also nochmal das Verhalten der Mails aus dem Kontakt-Formular und die infomail vom Dateiupload angesehen, alles ist ok. Aber diese beiden laufen über den php-mailer. Die mails von Passwort vergessen aber über sendmail auf einem Ubuntu-Server Es war sehr schwierig das hinzubekommen weil es nicht lief mit dem mailer. Ich habe dort schon umgestellt auf ISO8859-1 und getestet. Aber das Problem bleibt. In Thunderbird hab ich auch schon nachgesehen, dort ist utf-8 richtig eingestellt. Ich schicke Dir nochmal den Code der Seite, wäre schön wenn Du nochmal nachsauen könntest. Vielleicht liegt es irgendwie an html-entities, aber ich bin nicht so gut darin, ich kann nur testen. Mit iconv kenne ich mich nicht aus. Aber ich habe es aufgerufen in der console und es zeigt alle Möglichkeiten an, leider weiß ich da nicht weiter.

    Einmal editiert, zuletzt von Alien () aus folgendem Grund: Nachtrag: wenn ich den o.g. code von service@totenkpöpfe mit meinen Daten ersetze, den ich bei euch gefunden habe klappt es, aber weder namentliche Anrede, noch der Link erscheinen in der mail

  • Eine Sache die gleich auffällt, du setzt den header oben für die Html Seite aber nicht für die email. Dieses $from was du nutzt, ist der Header der E-Mail, nachzulesen hier:


    http://php.net/manual/de/function.mail.php


    Was du also testen kannst:

    Code
    $from = "From: email.de\r\n";
    $from .= "Content-type:text/html;charset=UTF-8" . "\r\n";


    Es könnte das verhalten erklären, weil beim weitersenden Thunderbird dann den utf-8 header nachträglich einführt (jeder Mail-Client verändert die Mail auf manche art beim bearbeiten (Weiterleiten, Antworten).


    Edit: Hier noch die Info zum header befehl in PHP. http://php.net/manual/de/function.header.php


    Grüße


    Timo

  • Ich danke Dir ganz ganz herzlich. Genau das war es! Nun muss ich nur noch die Zeilenumbrüche hinbekommen. Das das krieg ich schon.

    Nochmal ganz lieben Dank für Deine tolle Hilfe und alle anderen hier die geantwortet haben

    Gruß

    Alien

  • Eine Frage hätte ich bitte noch dazu: Der Link wird nicht mehr als Link zum Anklicken angezeigt jetzt. Kann ich das auch noch ändern oder muss er immer kopiert und eingefügt werden

  • Habe gerne geholfen.


    Du sendest die E-Mail als Plain-Text, daher ist die Interpretation eines Links dem Client hinterlassen (Zeilenumbrüche würden per \r\n gemacht werden).


    Alternativ kannst du die E-Mail auch als HTML senden (header anpassen) und dort dann wie gewohnt html also <br> und <a></a> für die Formatierung nutzen.

    Viele Grüße


    Timo

  • Ich verstehe es mal wieder nicht! Wie kann man sich nur mit der Mail-Funktion von PHP herumschlagen?! Wenn du doch sowieso den phpMailer im Einsatz hast, warum nicht auch hier? Nur weil es nicht sofort geklappt hat? Das kann kein Grund sein, denn hier klappt es ja auch nicht sofort.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!