Formular per eMail mit Dateianlagen versenden
Simone
0 Stephan Huber0 Simone0 Stephan Huber0 Simone
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
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
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
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
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 ?
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
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);
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
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
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