Simone: Formular per eMail mit Dateianlagen versenden

Hallo,

ich bin bei einen Problem an meine Grenzen gestoßen und hoffe ,daß Ihr mir helfen könnt .

Ich möchte Usern von meiner Page aus, die Möglichkeit geben, mir ein Mail mit Bildanlagen zu senden .
d.h. Der User schreibt eMail ins Formular und soll dann die Möglichkeit haben, mit der "Datei öffnen Dialogbox" eine oder mehrere Dateien auszuwählen, welche dann der Mail als Anlage zugefügt werden .

Bei einen Provider "Tripod" habe ich sowas auch schon gesehen, jedoch im Upload auf den Server .Leider konnte ich anhand des Quellcodes nicht ersehen, wie die "Datei öffnen Dialogbox" wird .

Das Formular soll mit "action="mailto:xyz.de" versendet werden . Geht das überhaupt mit Bildanlagen ?

Allen Leuten ,die mir helfen können im Voraus Herzlichen Dank !!!!!

Viele Grüße von Simone

  1. Hallo Simone:

    d.h. Der User schreibt eMail ins Formular und soll dann die Möglichkeit haben, mit der "Datei öffnen Dialogbox" eine oder mehrere Dateien auszuwählen, welche dann der Mail als Anlage zugefügt werden .
    Bei einen Provider "Tripod" habe ich sowas auch schon gesehen, jedoch im Upload auf den Server .Leider konnte ich anhand des Quellcodes nicht ersehen, wie die "Datei öffnen Dialogbox" wird .

    Mittels eines input tags mit type=file, siehe das folgende Beispiel:
    <FORM ENCTYPE="multipart/form-data" ACTION="index.php3" METHOD=POST>
    <input type="hidden" name="action" value="upload">
    Datei hochladen:<INPUT NAME="userfile" TYPE="file">
    <INPUT TYPE="submit" VALUE="OK">
    (siehe auch SELFTHML: Seite tchg.htm). Damit kann man aber nur Dateien in einer
    Auswahl darstellen, die auf dem lokalen Computer, nicht auf dem Server sind (mit neueren
    Browsern). Wenn jemand Dir eine Mail mit einem Bild als Anhang schicken soll, daß
    lokal auf seinem Computer ist, bleibt also nur die Möglichkeit, daß Du zuerst die
    Datei auf den Server mit einem entsprechenden Formular hochlädst, und dann
    im aufgerufenen Script (im obigen Beispiel index.php3) eine Funktion hast,
    die die Datei per Email an Dich schickt. Wenn Du nur die Bilder irgendwie bekommen
    willst, ist es wohl einfacher, die Dateien einfach in einem Verzeichnis deines Servers
    zu speichern, und per Email nur die Adresse zu schicken, weil das Versenden von
    Dateien per Email&Perl oder PHP recht kompliziert ist

    Das Formular soll mit "action="mailto:xyz.de" versendet werden . Geht das überhaupt mit Bildanlagen ?

    Ich glaubt nicht, um ein Script kommst Du wohl nicht herum (außerdem funktioniert
    action="mailto:..." eh' nur mit Netscape richtig gut...)

    grüße
    Stephan

    1. Hallo Stephan,

      herzlichen Dank für deine Antwort .Wie müßte die "upload.pl" ausehen .Ich weiß nicht wo ich anfangen soll .

      Wäre toll, wenn du ein bißchen Code hättest .
      Gibt es dieses vielleicht irgendwo im Download ?

      Ich dachte eigentlich, man könne "mailto:..." genau wie z.Bsp. "?Subject=xxx" einfach "?Attachment=c:\xyz.jpg"
      übergeben, und der eMail-Client macht den Rest .Vielleicht muß by ENCTYPE irgendwas besonderes angegeben werden . Irgendwie gehen muß das doch .Im Outlook Express füge ich doch auch Anlagen ein, und der Client codiert die Anlagen .Danach hat die Mail den Content-Type: multipart/mixed .

      Danke Simone

      1. Hallo Simone,
        ich habe die Methode mit mailto: gerade nochmal probiert, und es funktioniert mit
        Einschränkungen wirklich: Netscape 4 sendet die Datei als Anhang, wenn auch
        mit dem vollständigen Pfad als Dateinnamen. Allerdings nicht bei IE4, der macht
        zwar Outlook auf und übernimmt den Nachrichtentext, aber die Datei wird nicht
        gesendet :-(.
        (Quellcode mit Mailto:
            <FORM ENCTYPE="multipart/form-data" ACTION="mailto:xyz@xyz.com" METHOD=POST>
            <P>Datei senden: <INPUT NAME="userfile" TYPE="file"></P>
            <INPUT TYPE="submit" VALUE="OK">
            </FORM>
        )
        Die bessere Lösung ist also wohl doch ein Script. userfile ist genauso wie jede andere
        Formularvariable eine Umgebungsvariable, die man in PHP oder Perl ansprechen kann.
        Ich hab's in PHP gemacht, und weil da die Formularvariablen automatisch
        als Programmvariablen definiert werden, habe ich nur drei Zeilen Skript, die die
        Datei aus dem temorären Serververzeichnis, in der sie automatisch landet, in ein
        anderes Verzeichnis kopiert, und die Dateiattribute setzt:

        $filename="/usr/www/users/analogon/felix/data/".$userfile_name;
        copy ($userfile, $filename);
        chmod ($filename, 0666);

        $userfile_name ist ebenso wie $userfile eine Umgebungsvariable, die den Namen
        der Datei auf dem lokalen Computer enthält. In Perl sollte es ähnlich funktionieren,
        man muß sich nur dieFormularvariablen explizit holen, siehe
        SELFHTML: tgcm.htm
        Das ganze dann vom Server aus per Email weiterzuschicken, ist ein weiteres
        Problem, siehe den Thread unten zu "Dateien mit Perl per Email verschicken."

        Grüße
        Stephan

        1. Hallo Stephan,

          ich habe gleichmal probiert, Der IE meldet "HTTP 404 - Datei nicht gefunden" .

          Dein Code habe ich wie folgt abgeändert .

          #! /usr/bin/perl

          $filename="/home/simone/public-html/upload/".$userfile_name;
          copy ($userfile, $filename);
          chmod ($filename, 0666);

          Was mache ich falsch ?

          1. Hallo Simone,

            der Quelltext war wie gesagt PHP, nicht Perl, in Perl mußt Du dir die
            Formularvariablen erst aus der CGI-Umgebung holen, während PHP
            sie automatisch korresondierenden Variablen zuweist. Du mußt zuerst
            die Formulardaten mit
            read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});
            einlesen und analysieren (siehe die im letzten Post zitierte SELFHTML-Seite).
            Du könnstest auch bei:
            http://www.cgi-resources.com/ in der Kategorie Perl/File Upload
            schauen, da gibt es mehrere Scripts, die das in Perl machen.

            Grüße
            Stephan

            1. Hallo Stephan,

              Was ist PHP ?

              Sollte dieser Code jetzt nicht funktionieren ?Ich bekomme jedoch Interner Serverfehler .

              #! /usr/bin/perl

              read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
              @pairs = split(/&/, $buffer);
              foreach $pair (@pairs) {
                 ($name, $value) = split(/=/, $pair);
                 $value =~ tr/+/ /;
                 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
                 $value =~ s/<!--(.|\n)*-->//g;

              if ($allow != 1) {
                    $value =~ s/<([^>]|\n)*>//g;
                 }

              $FORM{$name} = $value;
              }

              $filename="/home/simone/upload/".$FORM{'userfile'};
              copy ($FORM{'userfile'}, $filename);
              chmod ($filename, 0666);

              1. Hi Stephan und Simone,

                ich suche bereits seit einiger Zeit nach einer Methode Dateien als Attachment zu versenden, konnte jedoch bisher keinen entsprechenden Source finden, bzw. ging meist irgendwas schief.

                Könnte evtl. jemand von Euch den fertigen CGI-Sourcecode hier im Forum ablegen, ich glaube das dies auch im Sinne der anderen Forumer sein dürfte.

                Gruß
                Andre Steffens

                1. Hi Andre,

                  ich kenne nur ein Perl-Skript,daß Dateien per Email senden kann:
                  http://www.bewley.net/perl/tidbits/getit.html

                  Grüße
                  Stephan

              2. Hallo Stephan,

                Was ist PHP ?

                PHP ist eine CGI-Sprache wie Perl, allerdings
                mit dem Unterschied, daß man die Anweisungen
                direkt in die HTML-Seite schreiben kann, die dann vom Server interpretiert wird, so
                wie Microsofts ASP, Cold Fusion, usw...
                Es ist für einige Dinge wie z.B. Formular-
                verarbeitung leicher zu handhaben als Perl.
                siehe http://www.php.net
                Deshalb funktioniert es auch nicht, wenn
                Du einfach nur die Perl-Funktionen
                hinzufügst, und dann meinen PHP-Code
                unverändert läßt, denn PHP hat andere
                Syntax und Funktionen als Perl. Ich denke,
                daß es z.B. den Copy-Befehl in dieser Form
                nicht gibt? (Ich kann leider nur PHP
                richtig, aber eigentlich sollten hier genügend Perl-erfahrene sein, die mit
                sowas kein Problem haben?)

                Stephan