#!D:/PERL_510/bin/perl.exe
##############################################################################
##############################################################################
# Setup Begin
$cgiurl = "[URL unfurl="true"]http://www.domain.com/cgi-bin/sendemail.cgi";[/URL] # THE URL OF CGI SCRIPT.
$filehead = "C:/[URL unfurl="true"]www/htdocs/domain/";[/URL] # THE REAL PATH OF "*.htm", "*.txt" FILES. (YOU MAY CONTACT YOUR ISP FOR THIS PATH)
$guestbookfile = "email.txt"; # DATABASE OF MESSAGES
$mainpagefile = "index_temp.htm"; # MAIN PAGE OF YOUR GUESTBOOK
$succpagefile = "ack.htm"; # THE PAGE AFTER LEAVING MESSAGE
$errorpagefile = "error.htm"; # THE PAGE TO SHOW ERROR MESSAGE
$managepagefile = "manage.htm"; # THE PAGE OF CONTROL PANEL
$allow_html = 2; # 1=ALLOWS VISTORS TO USE HTML. 2=DISABLE IT.
$perpage = 50; # MAXMIUM MESSAGES FOR EACH PAGE
$manageperpage = 250; # MAXIMUM MESSAGES OF CONTROL MODE
$time_miss = +0; # TIMER
$masteremail = "email\@domain.com"; # YOUR E-MAIL ADDRESS
$fromemail = "email\@domain.com"; # YOUR E-MAIL ADDRESS
$sendtomaster= 1; # 1=ENABLE 0=DISABLE (FUNCTION OF AUTO NOTICE)
$sendtoguest= 0;
# END
#############
#$|=1;
&get_form;
&set_var;
$manage=0;
if (($manageid ne "") && ($managepassword ne "")) {
if ($manage{$manageid} eq $managepassword) {
$manageinfo="&manageid=$manageid&managepassword=$managepassword";
$manage=1;
$perpage=$manageperpage;
}
}
print "Content-type: text/html\n";
print "Set-Cookie: cookieusername=$username; expires=30-Dec-99 GMT\n" if (($username ne "") && ($cookieusername ne $username));
print "Set-Cookie: cookieuseremail=$useremail; expires=30-Dec-99 GMT\n" if (($useremail ne "") && ($cookieuseremail ne $useremail));
print "Set-Cookie: cookieuserurl=$userurl; expires=30-Dec-99 GMT\n" if (($userurl ne "") && ($cookieuserurl ne $userurl));
print "\n";
$cookieusername=$username if (($username ne "") && ($cookieusername ne $username));
$cookieuseremail=$useremail if (($useremail ne "") && ($cookieuseremail ne $useremail));
$cookieuserurl=$userurl if (($userurl ne "") && ($cookieuserurl ne $userurl));
if ($job eq "add") {
&guestbook_add;
exit 0;
}
elsif ($job eq "manage") {
&guestbook_manage;
exit 0;
}
elsif (($job eq "erase") && ($manage==1)) {
&guestbook_erase;
exit 0;
}
@mainpagefile=&readtxtfile("$filehead$mainpagefile");
foreach (@mainpagefile) {
if ($_ =~ /<!--listhere-->/) {
if ($page eq "") {$page=1;}
@guestbook=&readtxtfile("$filehead$guestbookfile",1);
@guestbook=sort @guestbook;
if ($searchword ne "") {
@temp=();
foreach (@guestbook) {
if ($_ =~ /$searchword/i) {
push(@temp,"$_");
}
}
@guestbook=@temp;
}
$totalguestbook=$#guestbook+1;
splice(@guestbook,0,$#guestbook-$page*$perpage+1);
splice(@guestbook,$#guestbook-($page-1)*$perpage+1,($page-1)*$perpage);
print "<form method=post action=$cgiurl?job=erase&searchword=$searchword&page=$page$manageinfo>\n" if ($manage==1);
if ($#guestbook>=0) {
for ($i=$#guestbook;$i>=0;$i--) {
($mark,$chkdaten,$chktimen,$chkusername,$chkuserip,$chkuseremail,$chkuserurl,$chkcomments,$markend,$last)=split(/¡ü/,$guestbook[$i]);
$guestbook[$i]=~ s/$searchword/<font color=ff0000>$searchword<\/font>/gi if ($searchword ne "");
($mark,$chkdaten1,$chktimen1,$chkusername1,$chkuserip1,$chkuseremail1,$chkuserurl1,$chkcomments1,$markend,$last)=split(/¡ü/,$guestbook[$i]);
if (($mark eq "guestbook") && ($markend eq "end")) {
$temp1="";
$temp1="<font face=\"verdana\" size=\"2\" color=\"#FF0000\">Posted Today</font>" if ($chkdaten eq $daten);
$temp2="";
$temp2="<input type=checkbox name='guestbookmark' value='$chkdaten¡ü$chktimen'>" if ($manage==1);
print "$temp1\n";
print "<table border=0 cellspacing=0 cellpadding=0>\n";
print "<tr><td>$temp2<font face=\"verdana,arial\" size=\"2\"><b>$chkusername1</b> visited on $chkdaten1 at $chktimen1</i></font></td></tr>\n";
print "<tr><td>\n";
if (($chkuseremail ne "") || ($chkuserurl ne "")) {
print "<font face=\"verdana,arial\" size=\"2\"><b>Email:</b> <a href=mailto:$chkuseremail>$chkuseremail1</a></font><br>\n" if ($chkuseremail ne "");
print "<font face=\"verdana,arial\" size=\"2\"><b>Web Site:</b> <a href=$chkuserurl target='others'>$chkuserurl1</a></font><br>\n" if ($chkuserurl ne "");
}
print "<font face=\"verdana,arial\" size=\"2\"><b>$chkcomments1</b></font><br>\n";
print "</td></tr></table><br>\n\n";
print "<hr>"
}
}
}
print "<input type=submit value='DELETE'>\n</form>\n" if ($manage==1);
}
elsif ($_ =~ /<!--otherpagehere-->/) {
$i=1;
$j=$totalguestbook;
while ($j>0) {
print " ";
print "<a href=$cgiurl?page=$i&searchword=$searchword$manageinfo>" if ($page != $i);
print "$i";
print "</a>" if ($page != $i);
$j=$j-$perpage;
$i++;
}
}
else {
$_ =~ s/\$cgiurl/$cgiurl/g;
$_ =~ s/\$cookieusername/$cookieusername/g;
$_ =~ s/\$cookieuseremail/$cookieuseremail/g;
$_ =~ s/\$cookieuserurl/$cookieuserurl/g;
$_ =~ s/\$manageinfo/$manageinfo/g;
$_ =~ s/\$searchword/$searchword/g;
print "$_";
}
}
exit 0;
##########
sub guestbook_add {
&checkempty($username,"Your name cannot be blank.");
&checkempty($useremail,"Your email address cannot be blank.");
&checkempty($comments,"Your message cannot be blank.");
open(GUESTBOOK,">>$filehead$guestbookfile");
print GUESTBOOK "guestbook¡ü$daten¡ü$timen¡ü$username¡ü$userip¡ü$useremail¡ü$userurl¡ü$comments¡üend¡ü\n";
close(GUESTBOOK);
#webmaster email notice
send_mail($to, $from, $subject, $comments, $username, $userip, $useremail, $userurl, $daten, $timen);
sub send_mail {
use CGI qw(:standard);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
use Net::SMTP;
use MIME::Base64;
print header;
print start_html("Environment");
#Keep debug off in order for web and email to both work correctly on large messages
$smtp = Net::SMTP->new(
'domain.com' ,# may need a helo parameter here on some servers
Timeout => 30,
Debug => 0,
);
$smtp->datasend("AUTH LOGIN\n");
$smtp->response();
# -- Enter sending email box address username below. We will use this to login to SMTP --
$smtp->datasend(encode_base64('email@domain.com') );
$smtp->response();
# -- Enter email box address password below. We will use this to login to SMTP --
$smtp->datasend(encode_base64('password') );
$smtp->response();
$smtp->mail($fromemail);
$smtp->to($masteremail);
$smtp->to($fromemail);
$smtp->data();
$smtp->datasend("To: $masteremail\n");
$smtp->datasend("From: domain.com\n");
$smtp->datasend("Subject: New email sent to domain.com\n");
$smtp->datasend("\n");
$smtp->datasend("\n");
$smtp->datasend("\n");
$smtp->datasend("A copy of the message can be found below\n");
$smtp->datasend("======================================\n");
$smtp->datasend(" NAME: $username($userip) at $daten($timen)\n");
$smtp->datasend(" EMAIL: $useremail\n");
$smtp->datasend(" \n");
$smtp->datasend(" $comments\n");
$smtp->datasend(" \n");
$smtp->dataend();
$smtp->quit();
}
&guestbook_succ("Your message has been successfully sent.");
}
##########
sub guestbook_manage {
@managepagefile=&readtxtfile("$filehead$managepagefile");
foreach (@managepagefile) {
$_ =~ s/\$cgiurl/$cgiurl/g;
print "$_";
}
}
##########
sub guestbook_erase {
if ($guestbookmark ne "") {
@guestbook=&readtxtfile("$filehead$guestbookfile",1);
@guestbook=sort @guestbook;
open(GUESTBOOK,">$filehead$guestbookfile");
foreach (@guestbook) {
($mark,$chkdaten,$chktimen,$chkusername,$chkuserip,$chkuseremail,$chkuserurl,$chkcomments,$markend,$last)=split(/¡ü/,$_);
if (($mark eq "guestbook") && ($markend eq "end")) {
if (!($guestbookmark =~ /$chkdaten¡ü$chktimen/)) {
print GUESTBOOK "$_";
}
}
}
close(GUESTBOOK);
}
&guestbook_succ("DELETED!");
}
##########
sub guestbook_succ {
@succpagefile=&readtxtfile("$filehead$succpagefile");
foreach (@succpagefile) {
$_ =~ s/\$cgiurl/$cgiurl/g;
$_ =~ s/\$manageinfo/$manageinfo/g;
$_ =~ s/\$searchword/$searchword/g;
$_ =~ s/\$page/$page/g;
$_ =~ s/\$succmessage/$_[0]/g;
print "$_";
}
}
##########
sub set_var {
$job =&get_var('job' ,'\n|¡ü');
$username =&get_var('username' ,'\n|"|<|>|\&|;|\?|¡ü');
$useremail =&get_var('useremail' ,'\n|¡ü| ');
$userurl =&get_var('userurl' ,'\n|¡ü| ');
$cookieusername =&get_var('cookieusername' ,'\n|"|<|>|\&|;|\?|¡ü');
$cookieuseremail=&get_var('cookieuseremail','\n|¡ü| ');
$cookieuserurl =&get_var('cookieuserurl' ,'\n|¡ü| ');
$comments =&get_var('comments' ,'¡ü');
$searchword =&get_var('searchword' ,'\n|¡ü');
$page =&get_var('page' ,'\n|¡ü');
$guestbookmark =&get_var('guestbookmark' ,'\n');
$manageid =&get_var('manageid' ,'\n|"|<|>|\&|;| |\?|¡ü');
$managepassword =&get_var('managepassword' ,'\n|"|<|>|\&|;| |\?|¡ü');
$smtp_username =&get_var('smtp_username' ,'\n|"|<|>|\&|;|\?|¡ü');
$smtp_password =&get_var('smtp_password' ,'\n|"|<|>|\&|;|\?|¡ü');
$useremail="" if (!($useremail =~ /.*\@.*\..*/));
$userurl ="" if (!($userurl =~ /.*\:.*\..*/ ));
$comments =~ s/\n/<br>/g;
$cookieuseremail="" if (!($cookieuseremail =~ /.*\@.*\..*/));
$cookieuserurl ="[URL unfurl="true"]http://"[/URL] if (!($cookieuserurl =~ /.*\:.*\..*/ ));
$userip=$ENV{'REMOTE_ADDR'};
($secn,$minn,$hourn,$dayn,$monn,$yearn,$weekn,$yeardayn,$isdst) = localtime(time+(3600*$time_miss));
$monn=$monn+1;
if ($monn<10) {$monn="0$monn";}
if ($dayn<10) {$dayn="0$dayn";}
if ($hourn<10) {$hourn="0$hourn";}
if ($minn<10) {$minn="0$minn";}
if ($secn<10) {$secn="0$secn";}
$yearn=$yearn+1900;
$daten="$yearn/$monn/$dayn";
$timen="$hourn\:$minn\:$secn";
}
############
sub get_form {
@querys = split(/&/, $ENV{'QUERY_STRING'});
foreach (@querys) {
($name,$value) = split(/=/, $_);
$value = &decode($value);
$value = &filterhtml($value);
&setvaluetoform($name, $value);
}
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach (@pairs) {
($name, $value) = split(/=/, $_);
$value = &decode($value);
$value = &filterhtml($value);
&setvaluetoform($name, $value);
}
@cookies = split(/; /, $ENV{HTTP_COOKIE});
foreach $cookies (@cookies) {
($name, $value) = split(/=/, $cookies);
$value = &decode($value);
$value = &filterhtml($value);
&setvaluetoform($name, $value);
}
}
##########
sub decode {
local($return)=$_[0];
$return =~ tr/+/ /;
$return =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
return $return;
}
##########
sub filterhtml {
local($return)=$_[0];
$return =~ s/<!--(.|\n)*-->//g;
if ($allow_html != 1) {
$return =~ s/<([^>]|\n)*>//g;
$return =~ s/<//g;
}
return $return;
}
##########
sub setvaluetoform {
if ($FORM{$_[0]}) {
$FORM{$_[0]}="$FORM{$_[0]}¡±$_[1]";
}
else {
$FORM{$_[0]}=$_[1];
}
}
#########
sub get_var {
local($return)="";
$return="$FORM{$_[0]}" if ($FORM{$_[0]});
$return=~ s/$_[1]//g;
return $return;
}
#########
sub readtxtfile {
open(READTXTFILE,"$_[0]");
@readtxtfile=<READTXTFILE>;
close(READTXTFILE);
return @readtxtfile;
}
#############
sub checkempty {
local($chkval)=$_[0];
$chkval =~ s/ |<br>|\n//g;
&error($_[1]) if ($chkval eq "");
}
##########
sub error {
@errorpagefile=&readtxtfile("$filehead$errorpagefile");
foreach (@errorpagefile) {
$_ =~ s/\$errormessage/$_[0]/g;
print "$_";
}
exit 0;
}
This is the HTML code behind the success page ack.htm:
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function closeack() {
resultsWindow = window.close("ack.htm");
}
</SCRIPT>
</head>
<BODY BGCOLOR="#FFFFFF" onLoad='resizeTo(550,500)'>
<CENTER><H1><CENTER><FONT SIZE="4">$succmessage</FONT></CENTER></H1>
<form><input type=button value="Close" onClick="closeack();"></form>
</CENTER>
</BODY>