Andreas: Mozilla mail: jetzt wird ärgerlich(kein Anhang)

Hallo!

ich hab mir in dr Vergangenheit mal ein Script geschrieben, welches mir eine Muysql-Dump der wichtigesten Tabellen aus verschiedenen Datenbanken per GPG komprimiert und verschlüsselt, und diese Datei dann als Email-Anhang an mich verschickt. So weit so gut, das hat auch in Outlook prima geklappt, aber wenn ich diese Mail jetzt mit Mozilla mail abhole, habe ich da keinen Anhang! Die Größe der Email ist richtig, im Quelltext steht auch was, aber im Programm komme ich nicht an den Anhang. Im Quelltext steht folgendes:

[...]
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary = b74531cbd997b39bb5f981cbf3138ef13

This is a MIME encoded message.

--b74531cbd997b39bb5f981cbf3138ef13
Content-Type: text/plain
Content-Transfer-Encoding: base64

ZGIyNzA5NF8yMDAyLTA5LTA3LnNxbC5ncGcK

--b74531cbd997b39bb5f981cbf3138ef13
Content-Type: multipart/x-gzip; name = "db_ABC_2002-09-07.sql.gpg"
Content-Transfer-Encoding: base64

hQEOAzuqNBHf9/bnEAP/YbV3C0i+1F9dDZkzopaIWKvP2QjsSTr8s+I6k8/Xugsft3OvFUZhYRhs
D+sycDWvfznXH2pQf3tJ/Mc4jNe...

[ein paar 100 KB]
                           ...3T9RvO45ALk8zOdp9p/7FeDgPbc63BXLQ8Fzg+6
8qpHuzFe72JjqGc/5LTvDEyloQ8Vf22YZXRL/A3/WhAjOcAsRVVGWTHuzFe72JjqGc/5LTvDEyloQ8Vf22YZXRL/A3/WhAjOcAsRVVGWT

Ich vermute stark das Mozilla das Format von GPG nicht kennt, vermutlich würde es klappen wenn ich die Datei nochmal gzippen würde, aber das kann es ja nicht sein!

Der Witz an der Sache, wenn ich diese Nachricht als .eml-Datei speichere und in Outlook Express öffne, ist der Anhang da!

Hat jemand ne Idee wie ich das beheben kann?

Grüße
Andreas

  1. Hallo,

    MIME-Version: 1.0
    Content-Type: multipart/mixed; boundary = b74531cbd997b39bb5f981cbf3138ef13

    Gehören da nicht normalerweise Anführungszeichen rein:
    Content-Type: multipart/mixed; boundary = "b74531cbd997b39bb5f981cbf3138ef13"

    This is a MIME encoded message.

    --b74531cbd997b39bb5f981cbf3138ef13
    Content-Type: text/plain
    Content-Transfer-Encoding: base64

    ZGIyNzA5NF8yMDAyLTA5LTA3LnNxbC5ncGcK

    --b74531cbd997b39bb5f981cbf3138ef13
    Content-Type: multipart/x-gzip; name = "db_ABC_2002-09-07.sql.gpg"

    das sollte eigentlich application/x-gzip sein. Eine ordentliche MIME-Bibliothek würde diesen MIME-Typ mit dem Encoding kombiniert gar nicht zulassen.

    Content-Transfer-Encoding: base64

    hQEOAzuqNBHf9/bnEAP/YbV3C0i+1F9dDZkzopaIWKvP2QjsSTr8s+I6k8/Xugsft3OvFUZhYRhs
    D+sycDWvfznXH2pQf3tJ/Mc4jNe...

    [ein paar 100 KB]
                               ...3T9RvO45ALk8zOdp9p/7FeDgPbc63BXLQ8Fzg+6
    8qpHuzFe72JjqGc/5LTvDEyloQ8Vf22YZXRL/A3/WhAjOcAsRVVGWTHuzFe72JjqGc/5LTvDEyloQ8Vf22YZXRL/A3/WhAjOcAsRVVGWT

    und am Ende müßte dann doch noch ein
    --b74531cbd997b39bb5f981cbf3138ef13--
    stehen, oder? (beachte die -- am Ende).

    Hat jemand ne Idee wie ich das beheben kann?

    Korrekte MIME-Mails wären die Lösung. Mit Perl wäre Dir das nicht passiert *g*:
    use MIME::Entity;
    my $mail= MIME::Entity->build(Type        => "text/plain",
                                   Encoding    => "base64",
                                   Data        => [@messagelines]);

    $mail->attach(Path     => 'x.pgp',
                     Type     => "application/x-gzip",
                     Encoding => "base64"
                     );
    print $mail->as_string;

    Das ganze noch mit Mail::Mailer kombiniert, und alles wird gut;-)

    Grüße
      Klaus

    1. Hi!

      Gehören da nicht normalerweise Anführungszeichen rein:
      Content-Type: multipart/mixed; boundary = "b74531cbd997b39bb5f981cbf3138ef13"

      Hm, da ich mich damit selbst nicht auskenne habe ich folgende PHP-Lkasse dazu verwendet: http://www.phpwizard.net/resources/phpMisc/scripts/pretty/mail.php3
      Das hat bisher immer hervorragend funktioniert! Sollte die etwa fehlerhaft sein? Die wird nämlich auch in den FAQ der PHP Newsgroup empfohlen!

      das sollte eigentlich application/x-gzip sein. Eine ordentliche MIME-Bibliothek würde diesen MIME-Typ mit dem Encoding kombiniert gar nicht zulassen.

      Mein Fehler, keine Ahnung wieso ich da multipart hatte, Du wirst es nicht glauben, aber jetzt gehts!

      Wobei die anderen "Probleme" bleiben, also keine "" und kein bundary am Ende!

      und am Ende müßte dann doch noch ein
      --b74531cbd997b39bb5f981cbf3138ef13--
      stehen, oder? (beachte die -- am Ende).

      Das müßte dann tatsächlich ein Fehler in der Klase sein!

      Korrekte MIME-Mails wären die Lösung. Mit Perl wäre Dir das nicht passiert *g*:
      use MIME::Entity;
      my $mail= MIME::Entity->build(Type        => "text/plain",
                                     Encoding    => "base64",
                                     Data        => [@messagelines]);

      $mail->attach(Path     => 'x.pgp',
                       Type     => "application/x-gzip",
                       Encoding => "base64"
                       );
      print $mail->as_string;

      Das ganze noch mit Mail::Mailer kombiniert, und alles wird gut;-)

      Ja, hätte ich im Prinzip nichts dagegen, nur ist das Script recht komplex, und das alles nach PERL zu übersetzen muß nicht sein ;-)

      Grüße
      Andreas

      1. Hallo nochmal!

        Hm, da ich mich damit selbst nicht auskenne habe ich folgende PHP-Lkasse dazu verwendet: http://www.phpwizard.net/resources/phpMisc/scripts/pretty/mail.php3
        Das hat bisher immer hervorragend funktioniert! Sollte die etwa fehlerhaft sein? Die wird nämlich auch in den FAQ der PHP Newsgroup empfohlen!

        Also die entsprechende Funktion der Klasse:

        function build_multipart()
         {
         $boundary =  "b".md5(uniqid(time()));
         $multipart =  "Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME encoded message.\n\n--$boundary";

        for($i = sizeof($this->parts)-1; $i >= 0; $i--)
            {
            $multipart .=  "\n".$this->build_message($this->parts[$i]). "--$boundary";
            }
         return $multipart.=  "--\n";
         }

        das sieht doch recht vernünftig aus. Kann es sein das Mozilla bei mehreren 100 KB vielleicht den Quelltext nicht vollständig darstellt? Aber das glaube ich auch nicht. Oder hat es was mit GPG zu tun? Ich weiß ja gar nicht ob gzip überhaupt richtig ist, denn ich weiß nicht was GPG ausgibt. GPG Verschlüsselt die Daten und komprimiert diese gleichzeitig. Wenn aber jetzt erst komprimiert und dann verschlüsselt wird (was ich annehme, denn die verschlüsselten Daten dürften nicht annhähernd so gut komprimierbar sein), dann ist application/x-gzip ja falsch gewählt, oder? Aber was ist es dann? Application/GPG? Das gibt es wohl kaum!

        Was meinst Du?

        Grüße
        Andreas

        1. Moin,

          GPG Verschlüsselt die Daten und komprimiert diese gleichzeitig. Wenn aber jetzt erst komprimiert und dann verschlüsselt wird (was ich annehme, denn die verschlüsselten Daten dürften nicht annhähernd so gut komprimierbar sein)

          Eigentlich dürften sie dann gar nicht mehr komprimierbar sein. Wenn doch, dann ist das ein gutes Anzeichen für einen schlechten Verschlüsselungsalgorithmus.

          dann ist application/x-gzip ja falsch gewählt, oder? Aber was ist es dann? Application/GPG? Das gibt es wohl kaum!

          application/octet-stream würde sich anbieten. Es gibt zwar ein application/pgp-encrypted, aber das ist für PGP/MIME und da muss bestimmt noch ein äußeres Format eingehalten werden.

          Mal kurz eine PGP/MIME-Mail aus meinem Mail-Programm genommen:

          [...normale Header..]
          Mime-Version: 1.0
          Content-Type: multipart/encrypted; protocol="application/pgp-encrypted";
            boundary="=.BjpmJr.C)o05G+"

          --=.BjpmJr.C)o05G+
          Content-Type: application/pgp-encrypted

          Version: 1

          --=.BjpmJr.C)o05G+
          Content-Type: application/octet-stream

          -----BEGIN PGP MESSAGE-----
          Version: GnuPG v1.0.6 (GNU/Linux)

          hQIOA2ehZ4ewD0DtEAf/UB0CKNPG78tFDrk8dj9GHqYZf+lKR32QmYUTXXpi5d1u
          D/ZlNY5pLsYFKtrxfPg35oQtQSctJkGbZp2E68kAhk4k1hY9qV/AuxiYiPN9yKLk
          [...]
          1CGPlvJgoxlhb33BUmeGonfb0HHu/JCP4w==
          =TgLw
          -----END PGP MESSAGE-----

          --=.BjpmJr.C)o05G+--

          Und der Inhalt des verschlüsselten Teils:

          [keine führende Leerzeile]
          Content-Type: multipart/signed; protocol="application/pgp-signature";
           boundary="=.:1)5(dtK/wAd8b"

          --=.:1)5(dtK/wAd8b
          Content-Type: text/plain; charset=ISO-8859-1
          Content-Transfer-Encoding: 8bit

          Moin,
          [restlicher Text]
          --
          Henryk Plötz
          Grüße von der Ostsee

          * Wenn Wahlen etwas ändern könnten, wären sie verboten. *
          --=.:1)5(dtK/wAd8b
          Content-Type: application/pgp-signature

          -----BEGIN PGP SIGNATURE-----
          Version: GnuPG v1.0.6 (GNU/Linux)

          iD8DBQE9VSvA+ENniu4uT9IRAkCLAKC3gTg2xbrsQ0ViyrMcIF9xcrEEOACfVcb7
          k6hdQwf9M06c2Os1b2H3Jt4=
          =Z9nm
          -----END PGP SIGNATURE-----

          --=.:1)5(dtK/wAd8b--
          [abschliessende Leerzeile]

          Das tolle daran ist: Das ist ein Standard, und wenn du ein Mailprogramm mit der entsprechenden Unterstützung hast (ich nehme sylpheed) kann es die Mail on the fly entschlüsseln und du siehst keinen Unterschied. Der Inhalt der Mail sieht übrigens aus wie jede stinknormale andere Mail die ich schicke, also mit PGP/MIME-Signatur. Ich würde vermuten, dass du darin auch deine Mail mit der angehängten (nicht verschlüsselten, dafür mit gzip-Content Type) Datei packen kannst, und auch keine Signatur machen brauchst. Dann wäre die Verschlüsselung bis auf die Passphrase-Eingabe für deine Benutzer vollkommen transparent, wenn sie einen Mailer mit PGP/MIME-Unterstützung einsetzen (eine Liste davon gibt's irgendwo, google mal).

          Ich bin mir momentan nicht sicher, ob Mozilla dazu gehört, weiss aber, dass Netscape früher S/MIME unterstützt hat. Das könntest du bestimmt auch manuell erzeugen, dazu müsste aber wohl wieder das openssl-Kommandozeilentool herhalten.

          --
          Henryk Plötz
          Grüße von der Ostsee

          1. Hallo,

            Ich bin mir momentan nicht sicher, ob Mozilla dazu gehört, weiss aber, dass Netscape früher S/MIME unterstützt hat. Das könntest du bestimmt auch manuell erzeugen, dazu müsste aber wohl wieder das openssl-Kommandozeilentool herhalten.

            Mozilla kann dank http://enigmail.mozdev.org/ "normale" PGP-Nachrichten und auch (seit einiger Zeit) PGP/Mime. (wobei ich PGP/Mime noch nicht getestet habe)

            Grüße,

            Christian