Honda: Mail von Hotmail-Support --> UTF-8

Ist kaum zu glauben aber wahr!
.....
"Wir haben Ihre Nachricht erhalten, in der Sie uns mitteilen, dass Sie Ihr Sytem, mit dem Sie Ihre Nachrichte n an Ihre Kunden senden auf UTF - 8 umstellten, und nun die Hotmail Benutzer die Mails nicht richtig lesen können, weil die Umlaute nicht richtig dargestellt werden.

Bedauerlicherweise, müsse nwir Ihnen mitteilen, dass Hotmail dieses Format nicht unterstützt.

Wir hoffen, Ihnen mit unserer Antwort geholfen zu haben."
......

Nun stehe ich vor dem Problem, dass meine Daten (insbesondere Namen) aus der DB alle in UTF-8 codiert ist. Ich versende diverse Mails an die Nutzer, worin deren Namen enthalten ist... also Herr Müller zum Beispiel.

Wie schaffe ich es nun die Namen wie Müller wieder auf ISO umzumünzen, damit ich diese in ISO mailen kann, sodass auch Homtail und GMX-Account-Besitzer diese ordentlich dargestellt bekommen?

Dankbar für jegliche Lösungsansätze.
Merci,
Honda

  1. Hallo erstmal!

    per default wird PHP mit der XML-Erweiterung kompiliert. Diese Erweiterung bringt die Funktion utf8_decode() mit. Wenn Dein PHP die Erweiterung iconv hat gibt es die Möglichkeit iconv() zu nutzen.

    Andererseits werden die Daten der DB mit an Sicherheit grenzender Wahrscheinlichkeit auch nicht als UTF-8 dem für die Einspeisung verantwortlichem Script übergeben worden sein...

    Wie werden die Daten vor dem Speichern in die DB zu UTF-8 konvertiert?
    Welche DB nutzt Du?

    Gruß aus Berlin!
    eddi

    1. Andererseits werden die Daten der DB mit an Sicherheit grenzender Wahrscheinlichkeit auch nicht als UTF-8 dem für die Einspeisung verantwortlichem Script übergeben worden sein...

      Wie werden die Daten vor dem Speichern in die DB zu UTF-8 konvertiert?
      Welche DB nutzt Du?

      Hallo Eddi,
      ich verwende MySQL,...

      jedes Skript fängt bei mir mit folgendem an:
      <?session_start();header('content-type: text/html; charset=utf-8');

      So komm ich eigentich bis auf die Mail-Angelegenheit ganz gut über die Runden. Die Namen der Personen, die dann im Mail verwendet werden, werden zu Beginn ausgelesen und per $_GET bzw. $_SESSION weitergereicht, so landen diese dann auch bei dem Skript das für das Versenden der Mail verantwortlich ist.

      LG,
      Honda

      1. Re:

        jedes Skript fängt bei mir mit folgendem an:
        <?session_start();header('content-type: text/html; charset=utf-8');

        Jaja - das alte Lied: Programmieren statt Konfigurieren

        So komm ich eigentich bis auf die Mail-Angelegenheit ganz gut über die Runden. Die Namen der Personen, die dann im Mail verwendet werden, werden zu Beginn ausgelesen und per $_GET bzw. $_SESSION weitergereicht, so landen diese dann auch bei dem Skript das für das Versenden der Mail verantwortlich ist.

        Also hast Du kein Problem mit einer Datenbank - gut. Wo aber ist jetzt Dein Problem?

        Gruß aus Berlin!
        eddi

        1. Hallo,

          jedes Skript fängt bei mir mit folgendem an:
          <?session_start();header('content-type: text/html; charset=utf-8');

          Jaja - das alte Lied: Programmieren statt Konfigurieren

          Du meinst, dass ich in der PhP-ini dies hätte entsprechend setzten lassen können?

          Also hast Du kein Problem mit einer Datenbank - gut. Wo aber ist jetzt Dein Problem?

          ...mein Problem ist das mailen. Ich habe nirgends Probleme ausser, dass ich eine Lösung suche, wie ich die aus der DB (UTF codiert) geholten Namen (in UTF-8) entsprechend mailen kann, sodass sie unverstümmelt ankommen bei Hotmail und GMX (Yahoo, web.de usw. funktioniert ohne Probleme).

          Kurzum: ich habe auf der einen Seite einen vorgefertigten Text und auf der anderen hole ich den Namen "Müller" aus der DB.

          Nun erhält Herr Müller eine Mail, deren Begrüssung "Sehr geehrter Herr Müller" lautet (Müller wird also aus der DB geholt und mittels GET an das Mail-Script übergeben und von diesem in den entsprechenden vorgefertigten Text eingefügt und anschliessend automatisch gesandt).

          Ich hoffe, das ist einigermaßen verständlich.

          Danke & Grüsse,
          Honda

          1. Hallo Honda.

            Ich habe nirgends Probleme ausser, dass ich eine Lösung suche, wie ich die aus der DB (UTF codiert) geholten Namen (in UTF-8) entsprechend mailen kann, sodass sie unverstümmelt ankommen bei Hotmail und GMX (Yahoo, web.de usw. funktioniert ohne Probleme).

            Vielleicht hilft dir folgendes ein wenig weiter:

            (Inhalt von utf8.txt: „ÄÖÜ“, UTF-8-kodiert)

            <?php  
            error_reporting(E_ALL);  
            header('content-type:text/plain; charset=utf-8');  
              
            echo file_get_contents('./utf8.txt'); // Ausgabe: ÄÖÜ  
            ?>
            
            <?php  
            error_reporting(E_ALL);  
            header('content-type:text/plain; charset=iso8859-15');  
              
            echo file_get_contents('./utf8.txt'); // Ausgabe: Ã … (wegen Forumsmeldung beschnitten)  
            ?>
            
            <?php  
            error_reporting(E_ALL);  
            header('content-type:text/plain; charset=iso8859-15');  
              
            echo [link:http://de2.php.net/manual/de/function.utf8-decode.php@title=utf8_decode](file_get_contents('./utf8.txt')); // Ausgabe: ÄÖÜ  
            ?>
            

            Einen schönen Dienstag noch.

            Gruß, Ashura

            --
            sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
            mathbr:del.icio.us/ mathbr:w00t/
            1. Hallo Ashura,

              Vielleicht hilft dir folgendes ein wenig weiter:

              (Inhalt von utf8.txt: „ÄÖÜ“, UTF-8-kodiert)

              <?php

              error_reporting(E_ALL);
              header('content-type:text/plain; charset=utf-8');

              echo file_get_contents('./utf8.txt'); // Ausgabe: ÄÖÜ
              ?>

              
              >   
              > ~~~php
              
              <?php  
              
              > error_reporting(E_ALL);  
              > header('content-type:text/plain; charset=iso8859-15');  
              >   
              > echo file_get_contents('./utf8.txt'); // Ausgabe: Ã … (wegen Forumsmeldung beschnitten)  
              > ?>
              
              

              <?php

              error_reporting(E_ALL);
              header('content-type:text/plain; charset=iso8859-15');

              echo link:http://de2.php.net/manual/de/function.utf8-decode.php@title=utf8_decode; // Ausgabe: ÄÖÜ
              ?>

                
                
              Danke, damit kann ich schon was anfangen. Zumindest kann ich jetzt aufsplitten und an GMX und Hotmail den Mailbody "utf8\_decoden".  
                
              Habs mal probiert und es scheint zu funktionieren, dafür zeigt er jetzt bei den anderen Freemailern die Umlaute nicht an, da ich ja die Mail mit encode UTF-8 versende.  
                
              Ich werde die Emailadresse überprüfen und zwei Skripts schreiben je nachdem ob der Freemailer UTF-8 unterstützt oder nicht.  
                
              Danke nochmals,  
              Honda
              
              1. Ich werde die Emailadresse überprüfen und zwei Skripts schreiben je nachdem ob der Freemailer UTF-8 unterstützt oder nicht.

                nein, Du solltest jetzt mal was richtig machen und diesen Mail-Header weglassen!
                Ich versende auch via PHP Mails und kenne solche Probleme nicht.

                Gruß aus Berlin!
                eddi

                1. Hallo Eddi,

                  nein, Du solltest jetzt mal was richtig machen und diesen Mail-Header weglassen!

                  Du meinst diesen hier?

                  $headers .= 'Content-Type: text/plain; charset=UTF-8';

                  ich habe diesen nun ersetzt in:
                  $headers .= 'Content-Type: text/plain; charset=iso8859-15';

                  und die Namen mit $NAM=utf8_decode($NAM); "entschärft".

                  Dies scheint nun bei allen Mailern richtig zu funktionieren. Da ich momentan noch keine Asiatischen zeichen versenden muss geht es offenbar soweit, spannend wird es aber mit den slawischen Sonderzeichen, werde es morgen ausprobieren.

                  Buonas,
                  Honda

            2. Hello Ashura,

              gut erklärt, finde ich. Mit Ausnahme der Darstellungsschwierigkeiten des ASCII-dargestellten UTF-8-Textes, die Du als Bild hättest machen können :-) Soll keinesfalls Meckerei sein.

              Hier wird aber deutlich, dass der Vorschlag von Eddi, die Zeichencodierung einmal fest vorzugeben in der php.ini _nicht_ so einfach funktioniert. Man muss den Header für das Charset tatsächlich bewußt setzen, je nachdem, in welches System man sendet.

              Wie handhabt man das denn in einem Query an die DB, wenn die auf UTF-8 läuft?
              Angenommen, ich möchte alle Müllers aus der Tabelle listen?

              Wenn die Eingabe über ein Formular sud dem Browser kommt, das UTF-8 benutzt, muss man nur noch gegen Schnittstellen-Sonderzeichen (z.B. Injection) maskieren.

              Wenn ich den "Müller" im Script angebe, muss ich überlegen, ob ich dieses in einem Editor schreibe, der selber utf-8 benutzt und abspeichert. Wenn ich den Müller im Script aber mittels Editor erfasse, der nur ASCII (ANSI) speichert, dann muss ich ihn mittls uft8_encode() codieren, bevor ich ihn maskiere und ins Query packe.

              Ist das so richtig?

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

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau

              1. echo $begrüßung;

                Wie handhabt man das denn in einem Query an die DB, wenn die auf UTF-8 läuft?
                Angenommen, ich möchte alle Müllers aus der Tabelle listen?

                Bei MySQL ab Version 4.1 beispielsweise gibt es entweder eine Konfigurationseinstellung in MySQL, entsprechend der muss man seine Daten selbst kodieren. Oder man gibt mittels geeignetem Statement für diese Verbindung an, dass man anderen Kodierungen haben möchte. Eine weitere, wenn auch sicher nicht sehr praktikable Möglichkeit ist, Stringliteralen einen Character Set Introducer voranzustellen.

                echo "$verabschiedung $name";

              2. Hallo Tom,

                Hier wird aber deutlich, dass der Vorschlag von Eddi, die Zeichencodierung einmal fest vorzugeben in der php.ini _nicht_ so einfach funktioniert. Man muss den Header für das Charset tatsächlich bewußt setzen, je nachdem, in welches System man sendet.

                veto!

                Da _jedes_ Script Hondas header('content-type: text/html; charset=utf-8'); enthält, sollte hier konfiguriert werden.
                Bezüglich der durch Formular angelieferten Daten kann man sich 1. nicht sicher sein, daß der vorbestimmte Zeichensatz vom Client auch verwendet wird und 2. stimme ich Dir mit selben Vorbehalt (1.) zu, wenn Du Dich nicht auf HTTP-Header oder des Äquivalet (<meta>) beziehst, sonder das Attribut accept-charset meinst. Dieses sollte sehr wohl bewußt gesetzt werden.

                Gruß aus Berlin!
                eddi

  2. Hello,

    Nun stehe ich vor dem Problem, dass meine Daten (insbesondere Namen) aus der DB alle in UTF-8 codiert ist. Ich versende diverse Mails an die Nutzer, worin deren Namen enthalten ist... also Herr Müller zum Beispiel.

    Genau das meine ich, wenn ich vom neuen Babylon spreche...

    Du kannst bestimmt verlustbehaftet rückwandeln auf das reduziertere System der "Extended ASCII", also die gute alte Codepage 437. Das _ist_ nunmal noch der "international" gebräuchliche Standard der westlich orientierten Datenwelt.

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

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau