xpfreund: Umlaute in Mails (jetzt gehts)

Hallo,

Mein Thread Umlaute in Emails ist zwar schon im Archiv gelandet, aber ich habe eben rausgefunden wie das klappt.
  $subject = 'Text zum Ändern';
  $subject = utf8_encode($subject);
  $heading = "Hallo!";
  $text = "Dies ist eine Testmail zum Ändern. Schöne Grüße!";
  $body = $text;
  $body = utf8_encode($body);
  $header ='MIME-Version: 1.0' . "\r\n";
  $header .= 'Content-Type: text/plain; charset=utf8 format=flowed;' . "\r\n";
  $header .= 'Content-Transfer-Encoding: base64'."\r\n";
  $header .= 'From: '.$sender."\r\n";
so wird das überall ordentlich angezeigt.

gruß aus Senftenberg am See

  1. Moin!

    Mein Thread Umlaute in Emails ist zwar schon im Archiv gelandet, aber ich habe eben rausgefunden wie das klappt.
      $subject = 'Text zum Ändern';
      $subject = utf8_encode($subject);

    Fehlt da nicht etwas? Manche Mailclients mögen es nicht, wenn ungefragt (und nicht escaped) UTF-8-Zeichen im Betreff vorkommen.

    $heading = "Hallo!";
      $text = "Dies ist eine Testmail zum Ändern. Schöne Grüße!";

    Hier kannst du eine Zuweisung sparen:

    $body = $text;
      $body = utf8_encode($body);

    Kürzer wäre $body = utf8_encode($text);

    $header ='MIME-Version: 1.0' . "\r\n";
      $header .= 'Content-Type: text/plain; charset=utf8 format=flowed;' . "\r\n";
      $header .= 'Content-Transfer-Encoding: base64'."\r\n";

    Wo wird denn der Inhalt Base64-kodiert?

    $header .= 'From: '.$sender."\r\n";
    so wird das überall ordentlich angezeigt.

    Hm, würde ich jetzt nicht so unterschreiben.

    Viele Grüße,
    Robert

    1. Hallo,

      Mein Thread Umlaute in Emails ist zwar schon im Archiv gelandet, aber ich habe eben rausgefunden wie das klappt.
        $subject = 'Text zum Ändern';
        $subject = utf8_encode($subject);

      Fehlt da nicht etwas? Manche Mailclients mögen es nicht, wenn ungefragt (und nicht escaped) UTF-8-Zeichen im Betreff vorkommen.

      Beispiele:

      Subject: =?ISO-8859-1?Q?Vielen=20Dank=20f=FCr=20die=20Nutzung=20unserer=20Ve?= =?ISO-8859-1?Q?rkaufsabwicklung?=

      Subject: =?ISO-8859-1?Q?Best=E4tigung_der_=C4nderung_Ihres_eBay-Passworts?=

      Subject: =?UTF-8?Q?H=C3=A4ndlerpreisliste_KW49?=

      Ich bin da auch noch irritiert, was wirklich richtig ist. Man sieht in diesen Beispielen, die in den Mail-Clients richtig angezeigt werden, dass dem SUBJECT eine Kodierungsangabe vorangestellt wurde, dass aber der text dann trotzdem als Quoted printable angehängt wurde.

      Hm, würde ich jetzt nicht so unterschreiben.

      Hängt doch auch wesentlich davon ab, in welcher Codierung die Daten zum Script gelangt sind, das dann die Maildatei aufbaut und ob dann anschließend ein Sendmail-Script Verwendung findet oder ein "echter" SMTP-Zugang über Port 25

      Das Sendmail-Script ändert seinerseits wieder einiges automatisch, wie z. B. die Zeilenende-Zeichen der Header. Die dürfen an das Sendmail-Script nur mit einem einfachen \n (direkte Darstellung) übergeben werden, weil das Script sie selber zu \r\n (direkte Darstellung) ergänzt.

      LG
      Chris©

      1. Hallo,

        dass dem SUBJECT eine Kodierungsangabe vorangestellt wurde, dass aber der text dann trotzdem als Quoted printable angehängt wurde.

        Wo ist denn da der Widerspruch?

        Soweit ich weiß, ist in Headern nur 7-Bit US-ASCII zugelassen, also muss kann man Bytes darüber zwar notieren, aber nur in der Form =?Kodierung?Q?...?= gemäß RFC 2047. Das Q weist eben auf Quoted Printable hin. Es ist auch Base64 möglich, das wäre dann B, aber das will man noch weniger.

        Ist das verrückt? Ja. Das ist E-Mail. Das stammt aus anno dazumal. 7-Bit regiert halt noch die Welt.

        Mathias

        1. Hallo Mathias,

          dass dem SUBJECT eine Kodierungsangabe vorangestellt wurde, dass aber der text dann trotzdem als Quoted printable angehängt wurde.

          Wo ist denn da der Widerspruch?

          Nicht Widerspruch, sondern vollständige Umsetzung der Kodierung...
          Darum habe ich die Beipiele herausgesucht.

          Soweit ich weiß, ist in Headern nur 7-Bit US-ASCII zugelassen, also muss kann man Bytes darüber zwar notieren, aber nur in der Form =?Kodierung?Q?...?= gemäß RFC 2047. Das Q weist eben auf Quoted Printable hin. Es ist auch Base64 möglich, das wäre dann B, aber das will man noch weniger.

          Das erste ist also die Zeichenkodierung selbst und das zweite das Content-Transfer-Encoding, also wie die bereits kodierten Zeichen übertragen werden sollen.

          Es mir an dieser Stelle nur noch nicht klar, wann 8-Bit Kodierung in Headern durchgeht und wann nicht.

          LG
          Chris©

          1. Hallo,

            Das erste ist also die Zeichenkodierung selbst und das zweite das Content-Transfer-Encoding, also wie die bereits kodierten Zeichen übertragen werden sollen.

            Genau. Wenn man bei Mails mit UTF-8-kodiertem Body mal reinschaut, verwenden die oft auch diese Kombination, obwohl das soweit ich weiß unnötig ist und bloß die Mail aufbläht. Dümmer ist nur Base64. ;)

            Es mir an dieser Stelle nur noch nicht klar, wann 8-Bit Kodierung in Headern durchgeht und wann nicht.

            Gar nicht? In welchem Header wird denn 8-Bit-kodiert?

            Mathias

            1. ReHallo Mathias,

              Es ist mir an dieser Stelle nur noch nicht klar, wann 8-Bit Kodierung in Headern durchgeht und wann nicht.

              Gar nicht? In welchem Header wird denn 8-Bit-kodiert?

              ich war der Meinung, dass ich das in meinen eMail-Eingängen oft habe, dass Umlaute im Subject sind und die dort einfach 8-Bit kodiert drinstehen.

              Kann ich leider jetzt vom Arbeitsplatz kein Beispiel suchen. Dann werde ich erschlagen, wenn hier mein POP3 aufmache...

              LG
              Chris©

    2. Hallo,

      $subject = 'Text zum Ändern';
        $subject = utf8_encode($subject);

      Fehlt da nicht etwas? Manche Mailclients mögen es nicht, wenn ungefragt (und nicht escaped) UTF-8-Zeichen im Betreff vorkommen.

      Bei denen, die wir verwenden klappt das und da das nur firmenintern läuft, muss man da nicht besonders ausholen.

      $heading = "Hallo!";
        $text = "Dies ist eine Testmail zum Ändern. Schöne Grüße!";

      Hier kannst du eine Zuweisung sparen:

      $body = $text;
        $body = utf8_encode($body);

      Kürzer wäre $body = utf8_encode($text);

      Hab ich bei der eigentlichen Einbindung auch gemacht.

      $header ='MIME-Version: 1.0' . "\r\n";
        $header .= 'Content-Type: text/plain; charset=utf8 format=flowed;' . "\r\n";
        $header .= 'Content-Transfer-Encoding: base64'."\r\n";

      Wo wird denn der Inhalt Base64-kodiert?

      Das macht der Mailserver automatisch. Wenn ich dort 8bit angebe, kommt typisches base64 direkt in der E-Mail an.

      $header .= 'From: '.$sender."\r\n";
      so wird das überall ordentlich angezeigt.

      Hm, würde ich jetzt nicht so unterschreiben.

      Musst du ja auch nicht.

      gruß aus Senftenberg am See