#! /usr/bin/perl -w ##################################################### # formmailer.cgi - An opensource formmailer that can't be abused in order to spam. # Copyright (C) 15. August 2002 Daniel Thoma # dthoma@gmx.net # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ##################################################### use strict; use CGI; use URI::Escape; ### Configuration ### Konfiguration ### # Path to sendmail # Pfad zu sendmail my $sendmail = "/usr/sbin/sendmail -t"; #this should work with sendmail #das sollte mit sendmail funktionieren. #my $sendmail = "/usr/sbin/qmail-inject"; #this should work with qmail #das sollte mit qmail funktionieren. # Allowed addresses # Erlaubte Adressen my @mail = ('webmaster@mers.de','gaestehaus_baar@freenet.de'); ################### my $cgi = new CGI; my $to = $cgi->param('to'); # Receiver # Empfänger my $from = $cgi->param('Email'); # Sender # Absender my $subject = 'Webformular Ferienwohnung'; # Subject # Betreff #my $errorpage = $cgi->param('error'); # Page redirected to, if an error occurs # Seite zu der weitergeleitet wird, falls ein Fehler autritt. #my $successpage = $cgi->param('success'); # Page redirected to, if no error occurs # Seite zu der weitergeleitet wird, falls kein Fehler auftritt. my $errorpage =''; my $successpage =''; my @required = split(',',$cgi->param('required')); # Comma seperated list of the names of the required fields. # Mit Kommas unterteilte Liste der Namen der Pflichtfelder. push @required, 'Email','to'; # Sender and subject are allways required. # Absender und Betreff werden immer verlangt. my @return = split(',',$cgi->param('return')); # Fields sended with the mail. # Felder, die mit der Mail verschickt werden. eval { #Check required fields # Pflichtfelder überprüfen. my $missing_fields = ''; for(my $a = 0; $a < @required; $a++) { if(!$cgi->param($required[$a])) { $missing_fields .= "$required[$a] "; } } $missing_fields eq '' or die("The following fields weren't filled out: / Die folgenden Felder sind nicht ausgefüllt worden: $missing_fields"); #Check receiver address # Empfängeradresse überprüfen my $to_ok = 0; for(my $a = 0; $a < @mail; $a++) { if($mail[$a] eq $to) { $to_ok = 1; last; } } $to_ok or die("Receiver address $to isn't allowed. / Die Empfängeradresse $to ist nicht erlaubt."); # Check from and subject for newlines # Absender und Betreff auf Zeilenumbrüche überprüfen. $from !~ /[\n\r]/ or die('Senders address must not contain newlines. / Absenderadresse darf keine Zeilenumbrüche enthalten.'); $subject !~ /[\n\r]/ or die('Senders address must not contain newlines. / Betreff darf keine Zeilenumbrüche enthalten.'); # Defaultvalue for @return # Standardwert für @return if(!@return) { @return = $cgi->param(); } # Generate the mail # Erzeugen der Mail open(MAIL,"|$sendmail") || die('Failed sending the mail. / Senden der Mail fehlgeschlagen.'); print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n"; foreach(@return) { print MAIL "$_\n".join(":",$cgi->param($_))."\n\n"; } close(MAIL); }; if($@) { #Errorhandling #Fehlerverarbeitung my $error = $@; if($errorpage) { #Redirect to errorpage #Zur Fehlerseite weiterleiden. print $cgi->redirect($errorpage.'?'.uri_escape($@)); } else { #Defaulterrormessage #Standardfehlermeldung print $cgi->header(); print <Error/Fehler

Error/Fehler

The following error occured: / Der folgende Fehler ist aufgetreten:

$error

EOD } } else { if($successpage) { #Redirect to confirmation page #Weiterleiten zur Bestätigungsseite print $cgi->redirect($successpage); } else { print $cgi->header(); print <Confirmation / Bestätigung

Confirmation / Bestätigung

Your request was send. / Ihre Anfrage wurde weitergeleitet.

EOD } }