Formular via E-Mail versenden
Michael Krueger
Hello world!
Ist es moeglich, ein ausgefuelltes Formular via e-mail zu uebertragen, ohne auf dem Client-Rechner ein e-mail-Programm zu verwenden? (==> action="mailto:....")
Bei meinen Tests wird immer wieder der lokale e-mail-Client aufgerufen, sein MSG-Body bleibt jedoch leer!
Danke im voraus fuer alle Hinweise!
Mfg
M. Krueger
Hallo Michael,
es ist möglich, aber nicht ohne ein kleines CGI-Script.
Hier mal eines unserer Mail-Scripte. Es sollte funktionieren.
---------------------Diese Zeile gehört nicht mehr dazu
#! /usr/bin/perl
# method=post>
%recipients = ('Willi', 'info@willi.de', # Liste möglicher Empfänger und deren E-Mail Adressen
'Peter', 'info@peter.de') ;
$sender = 'infomail@gaga.de (Infomail)' ; # Absenderadresse
$mailprog = '/usr/lib/sendmail' ; # Mail-Programm
$referer = 'gaga.de' ; # Domain aus der Script gerufen wird
if ($ENV{'HTTP_REFERER'} =~ m/$referer/i) {
$redirect = $ENV{'HTTP_REFERER'} ;
$redirect =~ s/([^/]*)$// ;
$query = $ENV{'QUERY_STRING'} ;
$spacer = "!" ;
if ($query) {
@pairs = split(/$spacer/,$query) ;
foreach $pair (@pairs) {
($key, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$text{$key} = $value ;
}
}
$redirect = $redirect . $text{'page'} ;
if (exists $recipients{$text{'user'}}) {
$recipient = $recipients{$text{'user'}} ;
&send_mail ;
print "$ENV{'SERVER_PROTOCOL'} 302 Found\n";
print "Location: $redirect\n\n";
}
}
sub parse_form {
read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'}) ;
@pairs = split(/&/, $buffer) ;
push(@pairs, @ARGV) ;
foreach $pair (@pairs) {
$pair =~ tr/+/ / ;
$pair =~ s/%(0[adAD])/%20/g ;
$pair =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg ;
print MAIL "$pair\n" ;
}
}
sub get_time {
my($min, $hour, $day, $month, $year) ;
($sec, $min, $hour, $day, $month, $year) = (localtime(time))[0,1,2,3,4,5] ;
if ($min < 10) {
$min = "0" . $min ;
}
if ($sec < 10) {
$sec = "0" . $sec ;
}
$month++ ;
$date = "$day. $month. $year" ;
$time = "$hour:$min" ;
}
sub send_mail {
open (MAIL,"|$mailprog -t") ;
print MAIL "To: $recipient\n\n";
print MAIL "From: $sender\n" ;
print MAIL "Subject: Infomail\n\n" ;
&get_time ;
print MAIL "Infoanforderung vom $date, $time\n" ;
print MAIL "--------------------------------------------------------------------------------\n\n" ;
&parse_form ;
print MAIL "--------------------------------------------------------------------------------\n\n" ;
print MAIL "end\n" ;
close MAIL ;
}
---------------------Diese Zeile gehört nicht mehr dazu
Viel Erfolg
Roland
Das Skript von Roland ist sicher nicht übel, aber es geht auch einfacher...
Leider kann ich Dir den genauen Sourcecode derzeit nicht liefern (Firewall vom Betrieb) aber, ich kann Dir sagen welches Skript Du nutzen darfst:
Aufruf aus HTML:
<form action="http://www.m-online.de/maschinen-baur/cgi/email.cgi" method="post">
Folgende Werte mußt (bzw. solltest) Du dem Skript mitgeben (Als input type="hidden" oder ähnlich)
fp_from ..Absender
fp_to ..Empfänger *wichtig*
fp_sub ..Subject
fp_danke ..File die automatisch nach ausführen gestartet wird (Dankefile)
fp_echo? ..Text der unter die Mail gehangen wird (Es empfiehlt sich diesen Teil als "hidden"
beizusteuern). Anstelle des "?" muß irgendwas stehen (Zahl oder Buchstabe, hat
mit der Reihenfolge aber nichts am Hut.
Am wichtigsten ist "fp_to" den Rest kannst du Dir auch schenken.
Alle weiteren Werte werden wiefolgt übergeben:
name = wert
-----------
Solltest Du interesse am Sourcecode haben, oder sonstige Fragen aufkommen, kannst Du dies gerne per E-Mail tun.
Gruß Andre