rendered paste body#!/usr/bin/perl -T
# generic contact mail
use warnings;
use strict;
use Mail::Sendmail;
use CGI::Carp qw( fatalsToBrowser );
use CGI qw( header param );
sub DEBUG( @ );
sub addError( $ );
# parameters:
# fromname = sender's name
# fromemail = sender's email addr
# msgsubject = subject for the mail
# use as:
# <input type="text" name="name" /> for example.
# put the file contact.conf somewhere outside the www, so people won't be able to see your email
# reading the conf file
my ( $to, $server, $redirect );
open( my $fd, 'contact.conf' ) or die( "open() ( $! )" );
while ( my $l = <$fd> ) {
unless ( defined( $l ) && $l ) { next }
if ( $l =~ /^#/ ) { next }
if ( $l =~ /^to\s*=\s*(.+)/ ) { $to = $1; DEBUG "Found to: $to\n"; next }
if ( $l =~ /^server\s*=\s*(.+)/ ) { $server = $1; DEBUG "Found server: $server\n"; next }
if ( $l =~ /^redirect\s*=\s*(.+)/ ) { $redirect = $1; DEBUG "Found redirect: $redirect\n"; next }
}
close( $fd );
open( $fd, 'template.conf' ) or die( "open() ( $! )" );
my $template = '';
while ( my $l = <$fd> ) {
if ( $l =~ /^#/ ) { next }
$template .= $l;
}
close( $fd );
print header;
while ( $template =~ /{(.+?)}/g ) {
my $m = $1;
if ( my $param = param( $m ) || '' ) { $template =~ s/$m/$param/ }
}
print myheader();
if ( canSendMail( $ENV{ 'REMOTE_ADDR' } ) ) {
mail( $to, param( 'fromemail' ), 'Submitted contact form from your website PBD1.CO.UK', $template, $server );
} else {
print "<h1>Please wait some time before sending more mails</h1>\n";
}
print myfooter();
sub canSendMail {
# my ( $who ) = @_;
# open( my $fd, 'ipacl.lst' ) or die( "open() ( $! )" );
# my $raw = <$fd>;
# close( $fd );
# my @list = split( /|/, $raw );
# foreach my $i ( @list ) {
# my ( $ip, $time ) = split( /:/, $i );
# if ( ( $who eq $ip ) && ( time - $time < 120 ) ) {
# return 0;
# }
# }
# open( $fd, '>>ipacl.lst' ) or die( "open() ( $! )" );
# print $fd "$who:" . time . '|';
# close( $fd );
return 1;
}
sub mail {
my ( $to, $from, $subject, $body, $server ) = @_;
my %mail = (
To => $to,
From => $from,
Subject => $subject,
Message => $body
);
$Mail::Sendmail::mailcfg{ smtp } = [ $server ];
sendmail( %mail ) or DEBUG $Mail::Sendmail::error;
DEBUG $Mail::Sendmail::log;
}
sub DEBUG( @ ) {
my @what = @_;
# print @what;
}
sub myheader {
return <<'EOM;';
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Thank you</title>
</head>
<body>
<h1>Your message has been sent to David</h1>
EOM;
}
sub myfooter {
return <<'EOM;';
</body>
</html>
EOM;
}