Martin aus Wien: Email subject encoding

Hallo allerseits,

ich benütze die PHP Funktion mail() und kodiere das Subject so:

$subject = "Test";
$subject = "=?utf-8?Q?=".quoted_printable_encode($subject)."?=";

In Outlook, Pegasus und anderen Mailprogrammen wird das Subject so angezeigt:

Subject: Test

In "Ipswich Web Messaging" wird das Subject so angezeigt:

Subject: =?utf-8?Q?=Test?=

Was mache ich falsch? Und gehört nach dem dritten ? ein = oder nicht? Ich habe da verschiedene Beispiele gefunden.

Gruß und Dank

Martin aus Wien

  1. Hallo,

    ich benütze die PHP Funktion mail() und kodiere das Subject so:

    $subject = "Test";
    $subject = "=?utf-8?Q?=".quoted_printable_encode($subject)."?=";

    das ist AFAIS nicht ganz korrekt (siehe RFC 2047, Abschnitt 2 mit Beispielen). Das mittlere '=' gehört da nicht hin.

    In Outlook, Pegasus und anderen Mailprogrammen wird das Subject so angezeigt:
    Subject: Test

    Die sehen vermutlich großzügig über den Fehler hinweg.

    In "Ipswich Web Messaging" wird das Subject so angezeigt:
    Subject: =?utf-8?Q?=Test?=

    Ich kenne "Ipswich Web Messaging" nicht, aber ich würde einfach mal vermuten, dass die Burschen in Ipswich entweder von der Codierung von Header-Feldern in Mails noch nichts gehört haben, oder dabei so pingelig vorgehen, dass ein kleiner Fehler gleich die ganze Decodierung scheitern lässt.

    Was mache ich falsch? Und gehört nach dem dritten ? ein = oder nicht? Ich habe da verschiedene Beispiele gefunden.

    Im verlinkten RFC ist an dieser Stelle grundsätzlich kein '='.

    So long,
     Martin

    --
    F: Wer waren die ersten modernen Politiker?
    A: Die Heiligen drei Könige. Sie legten die Arbeit nieder, zogen teure Klamotten an und gingen auf Reisen.
    1. Danke!

      Der Ipswich ist nicht schuld und auch nicht das überzählige =.
      Meine quoted_printable Funktion war nicht korrekt, hat nämlich die Leerräume nicht in Unterstriche übersetzt.

      Also pingelig, aber korrekt, der Ipswich.

      Gruß und Dank

      Martin

      1. Hi,

        Der Ipswich ist nicht schuld und auch nicht das überzählige =.
        Meine quoted_printable Funktion war nicht korrekt, hat nämlich die Leerräume nicht in Unterstriche übersetzt.

        Unterstriche? Quoted Printable sollte Leerzeichen eigentlich in =20 umschlüsseln - und selbst das nicht zwingend; uncodierte Leerzeichen sind in Quoted-Printable durchaus erlaubt. Gemäß RFC 2047 müssen sie in derart codierten Mailheadern aber als =20 formuliert werden. Unterstriche wären mir in dem Zusammenhang allerdings neu.

        Ciao,
         Martin

        --
        Man ist so alt, wie man sich fühlt.
        Aber niemals so wichtig.
        1. Gemäß RFC 2047 müssen sie in derart codierten Mailheadern aber als =20 formuliert werden. Unterstriche wären mir in dem Zusammenhang allerdings neu.

          Stimmt. Das mit den Unterstrichen hab ich aus dem Wikipedia-Artikel "MIME" und es funktioniert.

          Es steht im Abschnitt 4.2(2) von RFC 2047:
                 The 8-bit hexadecimal value 20 (e.g., ISO-8859-1 SPACE) may be
                 represented as "_" (underscore, ASCII 95.).  (This character may
                 not pass through some internetwork mail gateways, but its use
                 will greatly enhance readability of "Q" encoded data with mail
                 readers that do not support this encoding.)

          Gruß

          Martin aus Wien

          1. Hi,

            Gemäß RFC 2047 müssen sie in derart codierten Mailheadern aber als =20 formuliert werden. Unterstriche wären mir in dem Zusammenhang allerdings neu.
            Es steht im Abschnitt 4.2(2) von RFC 2047:

            hehe, so weit habe ich nicht mehr gelesen. ;-)

            The 8-bit hexadecimal value 20 (e.g., ISO-8859-1 SPACE) may be
                   represented as "_" (underscore, ASCII 95.).  (This character may
                   not pass through some internetwork mail gateways, but its use
                   will greatly enhance readability of "Q" encoded data with mail
                   readers that do not support this encoding.)

            Mit anderen Worten: "Du darfst die Leerzeichen durch Unterstriche ersetzen anstatt sie mit =20 auszudrücken, das sieht hübsch aus, könnte aber andere Probleme nach sich ziehen."

            Alles klar,
             Martin

            --
            Küssen ist die schönste Methode, eine Frau zum Schweigen zu bringen.
      2. Moin!

        Der Ipswich ist nicht schuld und auch nicht das überzählige =.
        Meine quoted_printable Funktion war nicht korrekt, hat nämlich die Leerräume nicht in Unterstriche übersetzt.

        Warum verwendest du nicht http://de2.php.net/manual/en/function.mb-encode-mimeheader.php?

        - Sven Rautenberg