andreas : Mail mit Anhang, nur als MIME?

Hi!
Ich hab in den PHP-FAQs eine einfache Möglichkeit gefunden, Dateien an eine Mail anzuhängen, nämlich so:

$attachment = fread(fopen("test.jpg", "r"), filesize("test.jpg"));
[...]
$mail->add_attachment("$attachment", "test.jpg", "image/jpeg");

das gehört zu folgender Klasse:

http://www.phpwizard.net/resources/phpMisc/scripts/pretty/mail.php3

Jetzt meine Frage, kann man nur über so eine Mime-Mail Anhänge verschicken, oder könnte ich auch einen Anhang an die einfache php-Funktion mail() hängen?
Also was der Art

$mail = mail(blabla);
$mail->add_attachment("$attachment", "test.jpg", "image/jpeg");

  • so kann es eigentlich nicht gehen, gel? Gar nicht mit mail()?

Und noch eine Frage, wie müßte der Typ an Stelle von "image/jpeg" aussehen, wenn ich eine ASCII Datei versende?

Grüße
  Andreas

  1. Jetzt meine Frage, kann man nur über so eine Mime-Mail Anhänge verschicken, oder könnte ich auch einen Anhang an die einfache php-Funktion mail() hängen?

    Mail-Anhänge werden grundsätzlich per MIME verschickt. Das hat nichts mit PHP zu tun, sondern mit der Funktionsweise von Mails. Und somit funktioniert es auch per mail(). Deine zitierte Klasse verpackt das ganze nur in eine handlichere Umgebung, es ist aber sehr gut möglich, daß sie intern aber selber mail() benutzt.

    Also was der Art

    $mail = mail(blabla);
    $mail->add_attachment("$attachment", "test.jpg", "image/jpeg");

    • so kann es eigentlich nicht gehen, gel? Gar nicht mit mail()?

    Auf der Seite mit der Beschreibung zu mail() in der PHP-Anleitung sind zwei Hinweise, wie man selber MIME-Mails erstellt und per mail() verschickt.

    Und noch eine Frage, wie müßte der Typ an Stelle von "image/jpeg" aussehen, wenn ich eine ASCII Datei versende?

    Naja, text/ascii wohl :)

    Gruß,
      soenk.e

    1. Hallo!

      Meine güte, ich bin fast verrückt geworden, bnis jetzt habe ich nur probiet, poribiert, denn seltsamerweise ging das alles mit dateien, die ich selbst hochgeladen habe, aber die Die mysqldump erzeugt gingen nicht, ich weiß jetzt auch warum, die Rechte stehen nicht auf execute. Wie kann ich die ändern? (automatisch)

      Naja, text/ascii wohl :)

      Ich dachte text/plain?
      Geht um das dumpschema als.sql

      Kann ich vor dem versenden die .sql datei gzip-Komprimieren? kann mir jemdn sagen wie/bzw. mit welcher funktion das geht?

      Gruß
        Andreas

      1. Hallo nochmal!
        Nachdem ich mir jetzt über 100 mails erfolglos zugeschickt habe, muß ich nochmal hur fragen. Jede mail kommt bei mir an, nur leider ist die Attachement Datei immer leer, bzw. enhält sowas wie "# M".
        Das komische, wenn ich in dem sicherungsverzeichgnis per ftp eine Datei hochlade z.B. "index.count", eine ascii Datei die andauernd von php geöffnet wird um den Counter zu erhöhen, wenn ich die in das Sicherungsverzeichnis lade, und diese als Attachement angebe, funktioniert das super! Wenn ich die aber per mysqldump überschreibe:

        $dateiname="index.count";
        system ("/usr/bin/mysqldump -u".$user." -p".$pass." -h".$host." ".$db." > /www/daten/sicherung/".$dateiname, $fp);

        Dann funkrionier alles wiedr nicht! Ich bekomme zwar eine Datei mit dem Namen geschick, aber die ist leer, bzw. enhält "# M". Als mime-typ habe ich sowohl "test/ascii" als auch "text/plain" probiert. Ist doch einfacher text der in den dump-dateien steht, oder? Jedenfalls kann ich die per mysqldump erstellten Dateien per ftp runterladen und im editor öffnen. Ich habe auch chmod auf #777 gesetzt.
        Wie gesagt funktioniert der Versand wenn ich die Datei an gleiche Stelle mit gleichem chmod hochlade, geht der Versand. Sobald mysqldump eine Datei erstellt oder diese überschreibt, geht das nicht mehr.

        W A R U M  ? ? ? ? ?

        Für den Attachement Versand benutze ich folgende Klasse:
        http://www.phpwizard.net/resources/phpMisc/scripts/pretty/mail.php3

        Kann mir noch jemand helfen???

        Bitte, bitte!

        Grüße
          Andreas

        1. Nachdem ich mir jetzt über 100 mails erfolglos zugeschickt habe, muß ich nochmal hur fragen. Jede mail kommt bei mir an, nur leider ist die Attachement Datei immer leer, bzw. enhält sowas wie "# M".

          Wie gesagt funktioniert der Versand wenn ich die Datei an gleiche Stelle mit gleichem chmod hochlade, geht der Versand. Sobald mysqldump eine Datei erstellt oder diese überschreibt, geht das nicht mehr.

          Da würde ich als erstes mal folgendes probieren:

          1. Öffnet das PHP-Skript die Datei (also die von mysql erzeugte) überhaupt und kann es sie auch einlesen?
          Also einfach fopen() und dann Zeile für Zeile per echo ausgeben.

          2. Kann ich diese eingelesenen Daten per mail() verschicken (-nicht- als Anhang, sondern "normal")?

          3. Wie sehen die erzeugten Mails "roh" aus, sprich: stimmt die MIME-Struktur?

          Der erste Punkt wird sicherlich funktionieren (aber man weiß ja nie:), der zweite sollte eigentlich auch.

          So wie du es erklärt hast, tippe ich auf ein Problem mit der Dateigröße, aber das ist letztenendes auch nur ein Stochern im Dunkeln. Deshalb solltest du bei Punkt 3 prüfen, ob entweder die Daten in den Mails fehlen oder ob die MIME-Struktur falsch ist. Dann kann man weitersehen.

          Ich kenne deine verwendete Klasse nicht, aber probier doch mal, diese Mails selber zu erzeugen. Ich hatte bereits auf http://www.zend.com/zend/spotlight/sendmimeemailpart1.php hingewiesen (letzter Absatz, "Multipart MIME messages").

          Gruß,
            soenk.e

          PS: Eine Funktion zum Komprimieren findest du in der PHP-Anleitung unter "Zlib Compression Functions".

          1. Hi!
            Hab den Fehler jetzt, hatte wohl bei Filesize vergessen den kpl. Pfad anzugeben, war nur der Dateiname, daher das Problem. Hattest Recht, hab das nach und nach wieder zusammengebaut und irgendwann habe ich gedacht was ist das den für Schrott!!!
            Aber 2 kleine Fragen hätte ich noch,
            1. Die Umbrüche werden bei mir im nocrmalen Widows Editor nicht angezeigt? Wie kommte das?
            2. Wie kann ich die Datei am besten automatisch komprimieren?
            das mysql Dumpschema erzeuge ich wie folgt:
            $dateiname=$db."_".date("Y-m-d").".sql";
            $file="../daten/sicherung/".$dateiname;
            system ("/usr/bin/mysqldump -u".$user." -p".$pass." -h".$host." ".$db." > ".$file, $fp);

            Henryk hatte dazu bereits was geschrieben(http://forum.de.selfhtml.org/?m=28796&t=5091), und zwar dass man mit | die Standardausgabe an die Standardausgabe eines anderen Programmes hängen kann, verstehe das aber nicht wirklich,, was erdamit meint und vor allem wie das geht!

            Zur Komprimierung hatte ich selbst mal folgendes probiert(leider mit sehr mäßigem Erfolg):

            $data = implode("",$file);
            $gzdata = gzencode($data, 9);
            $fp = fopen($file.".gz", "w");
            fwrite($fp, $gzdata);
            fclose($fp);

            Erhalte immer in der Zeile von implode:

            Warning: Bad arguments to implode() in /kunden/webseite/dump.php on line 13

            Und wenn ich das weglasse (auch wenn nicht) wird immer eine Datei geschrieben, ....gz, aber mit ca. 10.000 facher komprinierung, von über 100.000B auf 10B. Naja, und öffnen kann man die dann auch nicht, unbekannter Dateityp(sollte doch eigetlich mit winzip/winrar gehen, oder?)

            Was mache ich hier schon wieder falsch?

            Jedenfalls schonmal vielen Dank bis hierher, hast mir sehr geholfen, grundsätzlich läuft es ja schonmal!

            Viele Grüße
              Andreas

            1. Moin

              Aber 2 kleine Fragen hätte ich noch,

              1. Die Umbrüche werden bei mir im nocrmalen Widows Editor nicht angezeigt? Wie kommte das?

              Das sind die normalen Unix-Zeilenenden. Ein halbwegs vernünftiger Editor (htmledit bzw. proton zum Beispiel) sollte damit klarkommen.

              1. Wie kann ich die Datei am besten automatisch komprimieren?
                das mysql Dumpschema erzeuge ich wie folgt:
                $file="../daten/sicherung/".$dateiname;

              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Bitte merk dir diese Zeile für später

              Henryk hatte dazu bereits was geschrieben(http://forum.de.selfhtml.org/?m=28796&t=5091), und zwar dass man mit | die Standardausgabe an die Standardausgabe eines anderen Programmes hängen kann, verstehe das aber nicht wirklich,, was erdamit meint und vor allem wie das geht!

              Bitte lern lesen. Ich hab bestimmt nichts von Ausgabe an Ausgabe geschrieben
              Ahja, könnten wir den Thread bitte an _einer_ Stelle fortsetzen, dieses zweigleisige Beantworten ist etwas mühsam.

              $data = implode("",$file);

              ^^^^^
              Merkst du was? implode() erwartet einen String und ein Array, nicht einen String und einen Dateinamen als String.

              Und wenn ich das weglasse (auch wenn nicht) wird immer eine Datei geschrieben, ....gz, aber mit ca. 10.000 facher komprinierung, von über 100.000B auf 10B. Naja, und öffnen kann man die dann auch nicht, unbekannter Dateityp(sollte doch eigetlich mit winzip/winrar gehen, oder?)

              Die 10 Byte sind der Header den gzip erzeugt. Es ist also eine Datei die nur einen Header und keine eigentlichen Daten enthält. Zum öffnen: wenn du es erstmal geschafft hast eine vernünftig gzipte Datei zu erzeugen, sollte winzip die auch öffnen können, sonst schmeiss winzip weg.

              --
              Henryk Plötz
              Grüße aus Berlin

              1. Hi!
                Inzwischen funktioniert alles. Mein beispiel von wegen komprimieren habe ich aus der Doku, aber mit Deiner Methode ist das sehr viel einfacher finde ich!
                Sorry dass ich mich falsch ausgedrückt habe, ich kann lesen und habe das nur falsch widergegeben, da ich es nach mehrmaligen lesen nicht zu 100% verstehen konnte, ich habe noch nie mit Shell gearbeitet. Sorry dafür, ich werde mein bestes tum dem Abhilfe zu verschaffen!

                Grüsse
                  Andreas