Ik heb via Viveda een webiste gehost. Zij ondersteunen geen CGI scripts die moet je zelf maken. Nu ben ik daaraan begonnen en mijn test loopt goed totdat ik een nieuwe input field wil toevoegen:
$mail{Body} = "Telefoon: ". $telephone . "\n";
Bij het versturen van het testformulier wordt ik wel doorverwezen naar de juiste bedankpagina. Maar de mail die verstuurd dient te worden naar de beheerder van de site wordt niet verstuurd.
#!C:/Perl/bin
#
# v20070319.1320 - Jan Reilink - <info@vevida.com>
# script optimized for Perl as ISAPI module
# Copyright 2004 - 2007 VEVIDA Services BV
#
use strict;
use CGI;
use CGI::Carp "fatalsToBrowser";
use Mail::Sendmail;# $mail{From} wordt uit het formulier gehaald, de waardes "naam", "emailadres" en
# "opmerking" moeten in het formulier aanwezig zijn.
#
# U hoeft verder alleen maar de 4 onderstaande variabelen te wijzigen
#
# $mail{To} Uw naam en uw emailadres, in de string 'Uw naam <uwnaam@uwdomein.com>'
# $subject = Het onderwerp dat de email dient te hebben
# $url = Het adres van uw website, http://www.uwdomein.com
# $urlbedankt = Het adres van uw bedanktpagina, bijvoorbeeld http://www.uwdomein.com/bedankt.html
#
# bedankt.html en feedback.html kunt u wijzigen zoals u wilt, het is echter niet aan te raden
# om iets in dit script te wijzigen.
#
# indien iemand een veld in van HTML-formulier niet invult wordt er een foutmelding getoond. Dit wordt via de
# regel `if ($name eq "" || ...` geregeld. Deze variabelen dienen dan wel eerst gedefineerd te worden via:
# $variabelenaam = $query->param('naam_van_het_veld');
#
# Meer informatie :
# * http://theoryx5.uwinnipeg.ca/CPAN/data/Mail-Sendmail/Sendmail.html
# * http://alma.ch/perl/Mail-Sendmail-FAQ.html
# * http://perldoc.perl.org/CGI.html
my($subject, $url, $urlbedankt, %mail);
$mail{to} = 'henny@webstek.nl';
$subject = '***** mail via contactformulier *****';
$url = 'http://www.webstek.nl';
$urlbedankt = 'http://www.webstek.nl/pages/contact_dank.html';
# hieronder hoeft niets gewijzigd te worden.
my $query = new CGI;
my $running_under_perlis = $ENV{'PERLXS'};
# Controleer ook of alle invoervelden ingevuld zijn. Zo niet, geef een foutmelding en exit.
# Hier zou eventueel ook gecontroleerd kunnen worden of de invoer voldoet aan datgene
# wat wij verwachten ("invoer validatie").
#
# Door middel van het $query object kunnen bepaalde acties uitgevoerd worden. Bijvoorbeeld het
# ophalen van gegevens uit het formulier (param()), het printen van HTML (p(), a({}))
# enz. Zie voor meer informatie de CGI documentatie. Error bericht volgens de CGI class manier:
# http://aspn.activestate.com/ASPN/docs/ActivePerl/5.8/lib/CGI.html
#
# VEVIDA levert geen ondersteuning op zaken zoals bijvoorbeeld het aanpassen
# van de layout of code, het script vereist enige kennis van Perl.
# Controle om te bepalen of het script wel via een POST aangeroepen wordt.
if ($ENV{'REQUEST_METHOD'} eq "GET" || $ENV{'REQUEST_METHOD'} eq "HEAD") {
if ($running_under_perlis ne 'PerlIS') {
print $query->header;
}
print $query->start_html("Error while filling in the form..."),
$query->p("No GET or HEAD requests please"),
$query->blockquote(
$query->a({href=>"javascript:history.go(-1)"},
"Please go back and try again.")),
$query->end_html;
exit();
}
# Controleer of de hidden code uit het formulier meegegeven is en of deze code
# overeenkomt met vooraf gedefinieerde string (md5 hash van $secret_code met
# een niet vindbare waarde ervoor (geheim)).
#
# WIJZIG DIT NIET!
# De geheime code die meegegeven wordt via het formulier is: V3v1DaSriNg0
# hier wordt "geheim" vooraan geplakt en van "geheimV3v1DaSriNg0" wordt een md5 hash
# (checksum, fingerprint) gemaakt:
# 6a5949b7fc4a23136f2bbfdbbaf2f1c6
use Digest::Perl::MD5 'md5_hex';
my ($secret_code, $our_code, $prefix);
$prefix = "geheim";
$secret_code = md5_hex($prefix, $query->param('code'));
$our_code = "6a5949b7fc4a23136f2bbfdbbaf2f1c6";
if ($secret_code ne $our_code) {
# De code kwam niet overeen, we gaan er vanuit dat het script rechtstreeks
# aangeroepen werd. Een nette foutmelding is daarom niet nodig.
exit();
}
# only "naam", "emailadres" and "opmerking" are required fields. Add other fields if you
# wish them to be required.
my @formFields = ("naam", "telefoon", "emailadres", "opmerking");
for my $fieldname (@formFields) {
if (!defined $query->param($fieldname) or $query->param($fieldname) eq "") {
if ($running_under_perlis ne 'PerlIS') {
print $query->header;
}
print $query->start_html("Error while filling in the form..."),
$query->p("Not all fields are filled in!"),
$query->blockquote(
$query->a({href=>"javascript:history.go(-1)"},
"Please go back and try again.")),
$query->end_html;
exit();
}
}
# Get the form variables and strip HTML, carriage return and
# line feed characters.
my ($name, $telephone, $email, $message);
$name = $query->param('naam');
$name =~ s/<[^>]*>//g;
$telephone = $query->param('telefoon');
$telephone =~ s/<[^>]*>//g;
$email = $query->param('emailadres');
$email =~ s/<[^>]*>//g;
$message = $query->param('opmerking');
$message =~ s/<[^>]*>//g;
$mail{from} = $name . ' <' . $email . '>';
$mail{Subject} = $subject;
$mail{Body} = "Naam: ". $name . "\n";
$mail{Body} = "Telefoon: ". $telephone . "\n";
$mail{Body} .= "Emailadres: ". $email . "\n";
$mail{Body} .= "Bericht: \n". $message . "\n\n\n\n";
$mail{Body} .= "-- \n". "Dit bericht is verstuurd van $url";
if (sendmail %mail) {
# Hier wordt de bevestiging of een foutmelding gegeven
if ($Mail::Sendmail::error) {
if ($running_under_perlis ne 'PerlIS') {
print $query->header;
}
print $query->start_html("Error sending mail..."),
$query->p("Er heeft zich een fout 2 voorgedaan",
"Ga aub", $query->a({href=>"javascript:history.go(-1)"},"terug naar het invulformulier"),
"en probeer het opnieuw<br />content of $Mail::Sendmail::error:\n$Mail::Sendmail::error"),
$query->end_html;
exit();
}
if ($running_under_perlis ne 'PerlIS') {
# Redirect, the CGI class way:
# http://aspn.activestate.com/ASPN/docs/ActivePerl/5.8/lib/CGI.html
print $query->redirect($urlbedankt);
}
else {
# Perl in ISAPI mode:
print $query->redirect(-uri=> $urlbedankt,
-status=>302);
}
}
# Error afhandeling
else {
if ($running_under_perlis ne 'PerlIS') {
print $query->header;
}
print $query->start_html("Error while sending mail..."),
"De volgende fout heeft zich voorgedaan:\n",
$query->p($query->b($Mail::Sendmail::error),
"<br />\nGa aub", $query->a({href=>"javascript:history.go(-1)"},"terug naar het invulformulier"),
"en probeer het opnieuw.<br />\n"),
$query->end_html;
exit();
}
# EOF, End of File