Felix Riesterer: Umlaute im Mailheader - die x.te

Liebe Experten,

mit Hilfe des Forumsarchivs bin ich zu einer für mich im Moment zufriedenstellenden Lösung gekommen, um meine UTF-8-kodierten Mails sinnvoll zu versenden. Warum nun dieses Posting? Mir ist etwas aufgefallen, von dem ich gerne Euren Rat hätte, ob ich da etwas korrigieren sollte, oder ob das überhaupt nicht in meiner Macht steht, korrigiert zu werden.

Mein GB-Script, das nun alles in UTF-8 kodiert, sendet mir eine Mail, die im Postfach von GMX so aussieht:

(Man ignoriere bitte die Schreibweise für "neuen" - sie ist nur aus Testzwecken so gewählt.)

Da sieht der Mailheader so aus, wie ich das auch erwarten würde. Öffne ich jedoch die Mail, dann sieht das Ganze plötzlich so aus:

Hier meine technische Lösung, um Header-Daten zu kodieren:

function encode_header ($str) {  
    // turn every non-ASCII character into a special UTF-8 representation  
    $output = '';  
  
    for ($i = 0; $i < strlen($str); $i++) {  
        $char = substr($str, $i, 1);  
        if (ord($char) > 127) {  
            $output .= '='.strtoupper(dechex(ord($char)));  
        } else  
            $output .= str_replace(' ', '=20', $char); // encode spaces  
    }  
  
    return '=?UTF-8?Q?'.$output.'?=';  
}  

Für den Absender erzeuge ich den String z.B. so (stark vereinfacht):

$header = 'From: '.encode_header($sender)."\n";

Nun meine Frage: Ist meine verwendete Kodierung verbesserungswürdig, oder ist hier einfach GMX entsprechend inkonsequent - oder sollte ich aufgrund von Kompatibilitätsgründen mit Mailprogrammen (ich benutze keines, daher habe ich da überhaupt keine Erfahrungswerte!) auf eine solche Kodierung völlig verzichten?

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  1. Hello Felix,

    nachdem ich lange selber herumgebastelt hatte, habe ich entdeckt, dass PBP schon siet Ver 4.0.6 eine fertige Funktion für die Codierung/Decodierung der Mime-Header enthält,

    http://www.php.net/manual/en/function.mb-encode-mimeheader.php
    und
    http://www.php.net/manual/en/function.mb-decode-mimeheader.php

    Die Kodierfunktion arbeitet gut, die Dekodierfunktion könnte um ein IMAP-Flag ergänzt werden, da bei IMAP-Accounts die Leerzeichen im Quoted-Printable durch Unterstriche ersetzt werden und die müssen zuerst zurückgewandelt werden, bevor man die Decode-Funktion benutzt. Da Unterstriche selber aber bei Quoted Printable selber kodiert werden, sind die vorhandenen Unterstriche also also in Wirklichkeit Leerzeichen... Oder war es jetzt anders herum? *egal* Beim Dekodieren gibt es noch 'was zu beachten ...

    Ich schaue nachher nochmal nach, wo ich die tests abgespeichert habe.

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Lieber Tom,

      http://www.php.net/manual/en/function.mb-encode-mimeheader.php
      und
      http://www.php.net/manual/en/function.mb-decode-mimeheader.php

      diese Funktionen sind mir bekannt. Jedoch scheinen sie nicht zwangsläufig in jeder PHP-Installation enthalten zu sein. Mein Testsystem (PHP5.2.6) unter Windoof meldet einen Fehler, da die Funktion nicht existiere...

      Liebe Grüße,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
      1. Guten Tag,

        Jedoch scheinen sie nicht zwangsläufig in jeder PHP-Installation enthalten
        zu sein. Mein Testsystem (PHP5.2.6) unter Windoof meldet einen Fehler, da
        die Funktion nicht existiere...

        Sie sind, siehe Manual, Teil der mbstring-Extension und nicht des Sprachkerns.

        Gruß
        Christoph Jeschke

        --
        Zend Certified Engineer
        1. Hellihello

          Sie sind, siehe Manual, Teil der mbstring-Extension und nicht des Sprachkerns.

          Welche sich unter win in der php.ini als Modul einladen lässt.

          extension=php_mbstring.dll auskommentieren...;

          Dank und Gruß,

          frankx

          --
          tryin to multitain  - Globus = Planet != Welt
          1. Hello,

            Welche sich unter win in der php.ini als Modul einladen lässt.

            extension=php_mbstring.dll auskommentieren...;

            genau, so hatte ich es doch in Erinnerung :-)

            Liebe Grüße aus Syburg bei Dortmund

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
          2. echo $begrüßung;

            extension=php_mbstring.dll auskommentieren...;

            Unter Auskommentieren versteht man normalerweise das Setzen von Kommentarzeichen, um einen bestimmten Bereich zu deaktivieren. Der Vorgang des Kommentarzeichenentfernens heißt Entkommentieren oder Auskommentierung entfernen.

            echo "$verabschiedung $name";

            1. Hellihello

              Unter Auskommentieren versteht man normalerweise das Setzen von Kommentarzeichen, um einen bestimmten Bereich zu deaktivieren. Der Vorgang des Kommentarzeichenentfernens heißt Entkommentieren oder Auskommentierung entfernen.

              Ich hatte doch schon so ein ungutes Gefühl https://www.xing.com/app/forum?op=showarticles;id=14509107

              Dank und Gruß,

              frankx

              --
              tryin to multitain  - Globus = Planet != Welt
              1. Lieber frankx,

                Ich hatte doch schon so ein ungutes Gefühl https://www.xing.com/app/forum?op=showarticles;id=14509107

                und was für ein Gefühl hast Du zu meiner ursprünglichen Frage?

                Liebe Grüße,

                Felix Riesterer.

                --
                ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
                1. Hellihello Felix,

                  und was für ein Gefühl hast Du zu meiner ursprünglichen Frage?

                  https://forum.selfhtml.org/?t=179502&m=1184658 und mal Thunderbird ausprobieren.

                  Dank und Gruß,

                  frankx

                  --
                  tryin to multitain  - Globus = Planet != Welt
                  1. Lieber frankx,

                    https://forum.selfhtml.org/?t=179502&m=1184658

                    (bitte immer ohne /my/ in der URL, der Search-String genügt übrigens völlig)

                    die Verwendung dieser Funktion macht weder mich glücklicher, mein Script zuverlässiger noch benötige ich sie überhaupt (siehe meine Lösung).

                    und mal Thunderbird ausprobieren.

                    Ja, ich werde wohl nicht darumherum kommen. Ich habe mich bisher immer gegen die Benutzung eines Mailclients gewehrt, da ich meine Mails von unterschiedlichen Rechnern aus abrufe, sodass ich sie alle auf dem Server belassen will, um sie dort zentral verfügbar zu behalten. Aber seit es IMAP gibt, ist das wohl kein echter Grund, keinen Mailclient zu verwenden...

                    Liebe Grüße,

                    Felix Riesterer.

                    --
                    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
                    1. Hellihello

                      Lieber frankx,

                      http://forum.de.selfhtml.org/my/?t=179502&m=1184658
                      (bitte immer ohne /my/ in der URL, der Search-String genügt übrigens völlig)

                      die Verwendung dieser Funktion macht weder mich glücklicher, mein Script zuverlässiger noch benötige ich sie überhaupt (siehe meine Lösung).

                      Aha, ich dachte, Du hättest eine "proprietäre" Lösung für ein Problem, dass in PHP als Modul schon vorhanden ist.

                      Aber seit es IMAP gibt, ist das wohl kein echter Grund, keinen Mailclient zu verwenden...

                      Seit es IMAP gibt, ist das ein weiterer Grund, einen Mailclient zu nutzen. Die GMX-Oberfläche ist ja vermutlich nur ein Variante eines IMAP-Clients.

                      Zudem kannst Du mit der Option "Nachrichten auf dem Server belassen" eben auf verschiedenen Rechnern Backups Deines Server-Postfaches machen.

                      Eventuell musst Du Dir überlegen, was mit versandten Mails passieren soll. Heraufladen in eine IMAP-Ordner des Servers oder nicht. Letzterenfalls sind sie eben erstmal nur auf dem Rechner verfügbar, von dem sie versandt wurden. Und ohne Backup.

                      Dank und Gruß,

                      frankx

                      --
                      tryin to multitain  - Globus = Planet != Welt
                    2. Moin!

                      http://forum.de.selfhtml.org/my/?t=179502&m=1184658&aaf=1
                      (bitte immer ohne /my/ in der URL, der Search-String genügt übrigens völlig)

                      Das Forum paßt die internen Links automatisch an, ein Weglassen von /my ist nicht notwendig. User ohne Anmeldung kriegen Links ohne /my, User mit Anmeldung kriegen Links mit /my.

                      - Sven Rautenberg

                      --
                      "Love your nation - respect the others."
      2. Hello Felix,

        http://www.php.net/manual/en/function.mb-encode-mimeheader.php
        und
        http://www.php.net/manual/en/function.mb-decode-mimeheader.php

        diese Funktionen sind mir bekannt. Jedoch scheinen sie nicht zwangsläufig in jeder PHP-Installation enthalten zu sein. Mein Testsystem (PHP5.2.6) unter Windoof meldet einen Fehler, da die Funktion nicht existiere...

        Das ist schade.

        Bei meinen PHP-Kandidaten ist sie allerdings überall dabei. Die lassen meistens bei 1&1 hosten. Ein paar andere sind aber auch dawzischen.

        Müsste man bei Windows nicht einfach nur die notwendige DLL beschaffen und in die Konfigurationsdatei eintragen?

        Liebe Grüße aus Syburg bei Dortmund

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de