#!/usr/bin/perl # # Yet another mail referer form # (c) Alex Bacik 14/07/07 # use strict; use CGI; use Net::SMTP; my $smtpserver = 'smtp.bytemark.co.uk'; my $myhost = 'alex.bacik.org'; my $cgi = new CGI; # Check authorisation my @allowed_referrers = ('www.nozzle.tv', 'www.bacik.org', 'www.windowboxdesign.net'); &Bail ("Can't find a referrer") unless ($ENV{'HTTP_REFERER'}); my $can_use = 0; foreach (@allowed_referrers) { if ($ENV{'HTTP_REFERER'} =~ m|https?://([^/]*)$_|i) { $can_use = 1; last; } } &Bail ("The URL $ENV{'HTTP_REFERER'} is not allowed to use this script") unless ($can_use); # Get important fields my $sender = $cgi->param('sender'); my $sender_name = $cgi->param('sender_name'); my $recipient = $cgi->param('recipient'); my $recipient_name = $cgi->param('recipient_name'); my $subject = $cgi->param('subject'); my $success_url = $cgi->param('success_url'); my $text = $cgi->param('text'); my $date = &get_date; # Check important fields $sender = "someone\@somewhere.com" unless ($sender); $sender_name = "Joe Bloggs" unless ($sender_name); &Bail ("No recipient defined") unless ($recipient); &Bail ("No sender defined") unless ($sender); $recipient_name = "Not Defined" unless ($recipient_name); $subject = "Not Defined" unless ($subject); &Bail ("No success url defined") unless ($success_url); # Prepare email my $smtp = Net::SMTP->new($smtpserver,Hello=>$myhost,Debug=>1); &Bail ("Couldn't connect to $smtpserver") unless $smtp ; $smtp->mail($sender); $smtp->to($recipient); $smtp->data(); $smtp->datasend("From: $sender_name <$sender>\nTo: $recipient_name <$recipient>\nSubject: $subject\n\n"); $smtp->datasend("Dear $recipient_name,\n\nYour webform $ENV{'HTTP_REFERER'} was filled in on $date.\n\n"); $smtp->datasend("Here's the feedback submitted:\n\n$text\n\n*************"); $smtp->dataend(); $smtp->quit(); print "Location: $success_url\n\n"; ############################################################## sub Bail { print $cgi->header(); print< Error: $_[0]

There was an error processing your request:

$_[0] EOF exit (0); } sub get_date { my @days = ('Sunday','Monday','Tuesday','Wednesday', 'Thursday','Friday','Saturday'); my @months = ('January','February','March','April','May','June','July','August','September','October','November','December'); my ($sec,$min,$hour,$mday,$mon,$year,$wday) = (localtime(time))[0,1,2,3,4,5,6]; my $time = sprintf("%02d:%02d:%02d",$hour,$min,$sec); $year += 1900; return ("$days[$wday], $months[$mon] $mday, $year at $time"); } #################################################################