Simon: E-Mails mit Anhang: Codierungsproblem (htmlMimeMail)...

Hallo Zusammen,

ich nutze htmlMimeMail um Mails zu versenden. Ich wollte das Rad halt nicht neu erfinden und habe daher auf eine bestehende Klasse zurückgegriffen...

Nun mein Problem. Ich stelle gerade auf UTF-8 um. Nun geht jedoch das Senden von Anhängen (getestet mit rtf) nicht mehr problemlos. ÄÖÜ und Co werden falsch dargestellt, jedoch nur im Anhang! In der Mail selber klappt alles...

Hier ausschnitte aus meinem Quelltext:

  
      $this->htmlMimeMailObj = new htmlMimeMail();  
      $this->htmlMimeMailObj->setTextCharset("utf-8");  
      $this->htmlMimeMailObj->setHtmlCharset("utf-8");  
      $this->htmlMimeMailObj->setHeadCharset("utf-8");  
  
//      $this->htmlMimeMailObj->setTextEncoding("quoted-printable");  
//      $this->htmlMimeMailObj->setHtmlEncoding("utf-8");  
  
      $this->htmlMimeMailObj->setText($this->mailText);  
      $this->htmlMimeMailObj->setFrom($this->mailAbsender);  
      $this->htmlMimeMailObj->setSubject($this->mailBetreff);  
      $this->htmlMimeMailObj->setCc($this->mailCc);  
      $this->htmlMimeMailObj->setBcc($this->mailBcc);  
  
  
      // Anhang hinzufuegen  
      for ($i=0; $i<sizeof($this->anhang); $i++) {  
        $this->htmlMimeMailObj->addAttachment($this->anhang[$i]['datei'], $this->anhang[$i]['name'], $this->anhang[$i]['cType'], $this->anhang[$i]['encoding']);  
      }  
  
  
      // Header-Array der Mail hinzufuegen  
      $headerKeys = array_keys($this->headers);  
      for ($i=0; $i<sizeof($headerKeys); $i++) {  
        $this->htmlMimeMailObj->setHeader($headerKeys[$i], $this->headers[$headerKeys[$i]]);  
      }  
  
      $ergebnis = $this->htmlMimeMailObj->send($this->mailEmpfaenger);  

~~~ich habs hin und her probiert, aber nix hat geholfen... Bin nun leider mit meinem Latein am Ende...  
  
$this->anhang[$i]['encoding'] = "" => es wird also base64 aus htmlMimeMail genommen... Habs aber auch mir quoted-printable probiert... :(  
  
Hat jemand noch eine Idee oder vielleicht sogar eine Lösung für mich?  
  
Besten Dank und Gruss  
- Simon
  1. Ich stelle gerade auf UTF-8 um. Nun geht jedoch das Senden von Anhängen (getestet mit rtf) nicht mehr problemlos. ÄÖÜ und Co werden falsch dargestellt, jedoch nur im Anhang!

    $this->htmlMimeMailObj->addAttachment($this->anhang[$i]['datei'], $this->anhang[$i]['name'], $this->anhang[$i]['cType'], $this->anhang[$i]['encoding']);

    Hat jemand noch eine Idee oder vielleicht sogar eine Lösung für mich?

    Und was steht in $this->anhang[$i]['datei'] und $this->anhang[$i]['cType']? Solange in letzterem nicht "text/[was-auch-immer]; charset=utf-8" drinsteht und/oder die betreffende Datei nicht utf-8-kodiert ist, kann das nicht funktionieren.

    1. $this->htmlMimeMailObj->addAttachment($this->anhang[$i]['datei'], $this->anhang[$i]['name'], $this->anhang[$i]['cType'], $this->anhang[$i]['encoding']);

      Hat jemand noch eine Idee oder vielleicht sogar eine Lösung für mich?

      Und was steht in $this->anhang[$i]['datei'] und $this->anhang[$i]['cType']? Solange in letzterem nicht "text/[was-auch-immer]; charset=utf-8" drinsteht und/oder die betreffende Datei nicht utf-8-kodiert ist, kann das nicht funktionieren.

      Sorry, da hätte ich auch dran denken können.

      $this->anhang[$i]['datei'] = Der "Quelltext" einer *.rtf Datei aus einer DB geladen und UTF8 formatiert. Hier eine Beispielhafte Zeile: "{\rtlch \ltrch\loch\f1\fs24\lang1031\i0\b0 Von Test von Simon äöüßµ, Test von Simon äöüßµ}" => Die Umlaute werden also richtig dargestellt. Hier: http://www.test.weltreporter.net/test/Bild.png gibts ein Bild, wie der Text aussieht wenn er ankommt. Also in der *.rtf Datei...

      $this->anhang[$i]['name'] = '20080225-00083925.rtf'
      $this->anhang[$i]['cType'] = 'application/rtf; charset=utf-8'
      $this->anhang[$i]['encoding'] = 'base64'

      cType ist zwar "application/rtf..." mit "text/...." geht es aber auch nicht.
      Sprich: Ich stehe weiterhin auf dem Schlauch!  :(

      1. Hat denn keiner eine Idee?

        • Simon
      2. $this->anhang[$i]['datei'] = Der "Quelltext" einer *.rtf Datei aus einer DB geladen und UTF8 formatiert.

        $this->anhang[$i]['cType'] = 'application/rtf; charset=utf-8'
        $this->anhang[$i]['encoding'] = 'base64'

        cType ist zwar "application/rtf..." mit "text/...." geht es aber auch nicht.

        Poste doch mal den Quelltext einer Testmail (From:, To:, Received: und dergleichen kannst du natürlich rausnehmen). Hast du es schon mit normalen Text probiert, nicht, dass RTF selbst dazwischen haut.

        Fest steht aber zumindest schon einmal, dass der Anhang mit dem falschen Zeichensatz angezeigt wird.

        1. Poste doch mal den Quelltext einer Testmail (From:, To:, Received: und dergleichen kannst du natürlich rausnehmen). Hast du es schon mit normalen Text probiert, nicht, dass RTF selbst dazwischen haut.

          Fest steht aber zumindest schon einmal, dass der Anhang mit dem falschen Zeichensatz angezeigt wird.

          Normaler Text im Anhang ist kein Problem. In der E-Mail selbst gehen auch Sonderzeichen...

          Hier eine Testmail:
           Von:    xxx@xxx.de
           Betreff:  betreff
           Datum:  26. Februar 2008 22:56:14 MEZ
           An:    xxx@xxx.de
           Return-Path:  xxx@xxx.de
           Delivery-Date:  Tue, 26 Feb 2008 22:56:14 +0100
           Received:  from xxx.xxx.de (xxx.xxx.de [212.xxx.xxx.xxx]) by xxx.xxx.de (node=mxeu6) with ESMTP (Nemesis) id 0MKsUu-1JU7mY3Ggr-0000l3 for xxx@xxx.de; Tue, 26 Feb 2008 22:56:14 +0100
           Received:  from xxx.xxx.de (xxx.xxx.de [195.xxx.xxx.xxx]) by xxx.xxx.de (node=mrelayeu3) with ESMTP (Nemesis) id 0MKxQS-1JU7mY2A9B-0003go; Tue, 26 Feb 2008 22:56:14 +0100
           Received:  from 81.xxx.xxx.xxx (IP may be forged by CGI script) by xxx.xxx.de with HTTP id 0NZY01-1JU7mY1zS2-0008O5; Tue, 26 Feb 2008 22:56:14 +0100
           X-Sender-Info:  xxx@xxx.xxx.de
           Precedence:  bulk
           Mime-Version:  1.0
           X-Priority:  1
           Content-Type:  multipart/mixed; boundary="=_2df1cd106357946414a8b4bc89873b2b"
           Message-Id:  jwv8xq.xxx@www.xxx.xxx.de
           X-Provags-Id:  V01U2FsdGVkX1/qUM1taTrjrtRK0TfrqGUBBfg6tSZjI+JJmjV nmiNhvAQO2qvKUS5EbVmJZAajOa/49XzUOzXt7tj+yzgBiASJZ EE3o5ObIU5UrQPVpwplhA==
           Envelope-To:  xxx@xxx.de

          text text text text text text

          <eom>

          Ich glaube mittlerweile ja fast, dass das Problem eher am Zusammenbau der RTF Datei liegt und nicht am E-Mail senden. Nur wie prüfe ich das?

          Gruss und Danke für die Hilfe,

          • Simon
          1. Poste doch mal den Quelltext einer Testmail (From:, To:, Received: und dergleichen kannst du natürlich rausnehmen). Hast du es schon mit normalen Text probiert, nicht, dass RTF selbst dazwischen haut.

            Normaler Text im Anhang ist kein Problem.

            Dann ist also RTF selbst die Ursache, nicht die E-Mail. dedlfix hat dazu schon die richtige Seite rausgesucht, bei Microsoft findest du auch die Spezifikation der wohl aktuellen Version RTF 1.9.

            Dass die Ursache bei RTF selbst liegt, deutet letztlich auch der MIME-Typ application/rtf an. Falls es denn der richtige ist, hätte ich gleich anmerken müssen, dass das charset-Attribut bei application-Typen, also Binärdaten, natürlich keinen Sinn macht.

            Hier eine Testmail:

            Mime-Version:  1.0
            Content-Type:  multipart/mixed; boundary="=_2df1cd106357946414a8b4bc89873b2b"

            text text text text text text

            <eom>

            Da fehlt nun ausgerechnet der relevante Teil, nämlich der RTF-Anhang mit allem drum und dran :-) Aber das ist ja nun egal.

            Ich glaube mittlerweile ja fast, dass das Problem eher am Zusammenbau der RTF Datei liegt und nicht am E-Mail senden. Nur wie prüfe ich das?

            Hast du schon, indem du einen normalen Text geschickt und festgestellt hast, dass es dort mit utf-8 funktioniert.

            1. Vielen Dank ihr zwei! Ich hab es zwar bisher noch nicht hinbekommen, gebe aber noch nicht auf. Sonst melde ich mich noch mal einfach hier...

              Habt mir sehr geholfen!

              Vielen Dank

              • Simon
      3. echo $begrüßung;

        Ich nehme stark an, dass die RTF-Datei wie eine Binärdatei zu betrachten ist. sämtliche außerhalb notierte Kodierungsangaben werden nutzlos sein, denn als reine Datei (also ohne einen HTTP-Header mit charset-Angabe) muss sie ja auch funktionieren. Wenn ich mir http://latex2rtf.sourceforge.net/rtfspec_6.html ansehe, interpretiere ich das als Bestätigung meiner Vermutung.

        Die Umlaute werden also richtig dargestellt.

        Richtig und falsch ist eine Frage der korrekten Dekodierung. Vielleicht siehst du ja auch eine falsche Darstellung, weil sie zwar in deinem Texteditor wie gemeint angezeigt wird, aber nicht der für diese RTF-Datei definierten oder einer Default-Kodierung entspricht.

        Hier: http://www.test.weltreporter.net/test/Bild.png gibts ein Bild, wie der Text aussieht wenn er ankommt. Also in der *.rtf Datei...

        Das sind UTF-8-Zeichensequenzen als ISO-8859-1 interpretiert. Ich denke, des Rätsels Lösung wird darin liegen, _in_ den RTF-Daten eine Angabe der verwendeten Kodierung zu notieren.

        echo "$verabschiedung $name";