perl script, sendmail sends user email but not me

7 views
Skip to first unread message

stevei...@yahoo.com

unread,
Nov 6, 2005, 10:11:31 AM11/6/05
to Perl Mail::Sendmail
This is a contact us script.. Supposed to send us an email after user
fills out the html form. It is supposed to send us an email and It is
supposed to send them (the user) an email letting them know we got
their message, but it only sends them an email, it doesnt send us one.

This script I have ran before on a different host company a
few years ago and it worked fine. Now I have yahoo webhosting and I
can't get it to function correctly. The perl script runs and executes
everything fine really but the problem is I can't receive email even
though in the script it is supposed to send me email. The script does
send the person filling out the form an email based on the contents of
the script, gives them a responder and the contents of what they filled
out. If someone could enlighten me if they know the problem or see if
they could run it on their server that would be helpful.

================================================

#!/usr/bin/perl -w

use Socket;

############## SPECIAL FORM VARIABLES ############################
#required: comma delimited list of required entry fields
#data_order: comma delimited list indicating

what fields to actually
# print and in what order.
#outputfile: the name of the file to save the data in if using a file.
# the file will automatically be named ending with .bout
#emailfile: the name of the file to hold only the sender e-mail
address
# the file will automatically be named ending with .bemf
#ok_url: URL to go to if successful
#not_ok_url URL to go to if unsuccessful
#submit_to: email address of person to input receive data by mail
# this can be a comma seperated list of e-mail addresses
#cc_to: email address of Cc Recipient
# this can be a comma seperated list of e-mail addresses
#submit_by: email address of person completing form
#autorespond: NO LONGER USED AS OF JAN 31, 2000
#automessage: text to print for autoconfirmation e-mail
# the file will automatically be named ending with .baut
#form_id: name of form for e-mail subject
#countfile: name of file for serial number counter
# the file will automatically be named ending with .bcnt
#okaydomains: prevents calling the script from other sites,
# without restricting e-mail addresses.
# replaces $SECURE_NAME from earlier versions.
# use only lower case letters.
#SMTP_SERVER: the full host name of the server providing e-mail
# gateway service
##################################################################

## MAIN ##########################################################

@okaydomains=("http://funinmb.com", "http://www.stevejurmu.com");

#SMTP_SERVER: indicates the name of the host acting as the e-mail
# gateway. "localhost" should work on most systems.

#$SMTP_SERVER="localhost";

#OR IF SMTP IS UNAVAILABLE TO YOU, USE SEND_MAIL-
# BUT NOT BOTH!

$SEND_MAIL="/usr/sbin/sendmail -t";

$lockfile="/tmp/bnbform.lck";

$SD=&sys_date;
$ST=&sys_time;

&decode_vars;

&valid_page;

if ($fields{'countfile'} ne "") { &get_number; }

&valid_data;

&write_data;

if ($fields{'automessage'} ne "") { &answer_back; }

if ($fields{'ok_url'} ne ""){
print "Location: $fields{'ok_url'}\n\n"; exit;
}
else { &thank_you; }

##################################################################
sub write_data
{

if ($fields{'submit_by'} ne "") {
if (&valid_address == 0) {
&bad_email;
exit;
}
}

if ($fields{'submit_by'} ne "" && $fields{'emailfile'} ne "") {
open (EMF,">>$fields{'emailfile'}");
print EMF "$fields{'submit_by'}\n";
close (EMF);
}

if ($fields{'submit_to'} ne "") {
$msgtext="";
$msgtext .= "On $SD at $ST,\n";
$msgtext .= "The following information was submitted:\n";
$msgtext .= "From Host: $ENV{'REMOTE_ADDR'}\n";
}

if ($fields{'outputfile'} ne "") {
&get_the_lock;
open(OUT_FILE,">>$fields{'outputfile'}");
}

foreach $to_print (@sortlist) {
if ($fields{'outputfile'} ne "")
{ print OUT_FILE "$fields{$to_print}\|"; }
if ($fields{'submit_to'} ne "")
{ $msgtext .= "$to_print = $fields{$to_print}\n"; }
}
if ($fields{'outputfile'} ne "") {
print OUT_FILE "$SD\|$ST\|\n";
close(OUT_FILE);
&drop_the_lock;
}

foreach $to_get (@recipients) {
$mailresult=&sendmail($fields{submit_by}, $fields{submit_by},
$to_get, $SEND_MAIL, $fields{form_id}, $msgtext);
if ($mailresult ne "1") {
print "Content-type: text/html\n\n";
print "MAIL NOT SENT. SMTP ERROR: $mailcodes{'$mailresult'}\n";
exit
}
}
foreach $to_cc (@cc_tos) {
$mailresult=&sendmail($fields{submit_by}, $fields{submit_by},
$to_cc, $SEND_MAIL, $fields{form_id}, $msgtext);
if ($mailresult ne "1") {
print "Content-type: text/html\n\n";
print "MAIL NOT SENT. SMTP ERROR: $mailcodes{'$mailresult'}\n";
exit
}
}

}

##################################################################
sub decode_vars
{
$i=0;
read(STDIN,$temp,$ENV{'CONTENT_LENGTH'});
@pairs=split(/&/,$temp);
foreach $item(@pairs) {
($key,$content)=split(/=/,$item,2);
$content=~tr/+/ /;
$content=~s/%(..)/pack("c",hex($1))/ge;
$content=~s/\t/ /g;
$content=~s/\0//g; #strip nulls
$fields{$key}=$content;
if ($key eq "data_order") {
$content=~s/\012//g;
$content=~s/\015//g;
$content=~s/ //g;
$content=~s/ //g;
@sortlist=split(/,/,$content);
}
if ($key eq "required") {
$content=~s/\012//g;
$content=~s/\015//g;
$content=~s/ //g;
@mandatory=split(/,/,$content);
}
if ($key eq "submit_to") {
$content=~s/\012//g;
$content=~s/\015//g;
$content=~s/ //g;
@recipients=split(/,/,$content);
}
if ($key eq "cc_to") {
$content=~s/\012//g;
$content=~s/\015//g;
$content=~s/ //g;
@cc_tos=split(/,/,$content);
}

}
if (
( ($fields{automessage}=~ /^([-\/\w.]+)$/ || $fields{automessage}
eq "") &&
($fields{countfile}=~ /^([-\/\w.]+)$/ || $fields{countfile} eq
"") &&
($fields{emailfile}=~ /^([-\/\w.]+)$/ || $fields{emailfile} eq
"") &&
($fields{outputfile}=~ /^([-\/\w.]+)$/ || $fields{outputfile} eq
"") )
) {$donothing=0;}
else {
print "Content-type: text/html\n\n sorry, invalid
characters...\n";
exit;
}
if ($fields{automessage} ne "") {$fields{automessage} .= ".baut";}
if ($fields{countfile} ne "") {$fields{countfile} .= ".bcnt";}
if ($fields{emailfile} ne "") {$fields{emailfile} .= ".bemf";}
if ($fields{outputfile} ne "") {$fields{outputfile} .= ".bout";}

}

##################################################################
sub valid_data
{
if ($fields{'data_order'} eq "") #make sure we have work to do!
{
print "Content-type: text/html\n\n";
print <<__W1__;

<H1>NO data_order list SPECIFIED!</H1>

__W1__
exit;
}

foreach $to_check (@mandatory) #test all required fields, bail on
1st bad
{
if ($fields{$to_check} eq "") {
if ($fields{'not_ok_url'} ne "") {
print "Location: $fields{'not_ok_url'}\n\n";
exit;
}
else { &try_again; }
}
}

}

##################################################################
sub thank_you
{
print "Content-type: text/html\n\n";
print <<__W2__;
<BODY BGCOLOR="#FFFFFF">
<CENTER>
<TABLE WIDTH=550 BORDER=1>
<TR>
<TD>
<H1>Thank you!</H1>
Your information has been sent and I will be in touch
with you as soon as I can
<P>
Here is the information you provided:
<P>
__W2__

foreach $itm (@sortlist) {
print <<__W2A__;
$itm: $fields{$itm}
<BR>
__W2A__
}

print <<__W2B__;
</TD>
</TR>
</TABLE>

__W2B__

exit;
}

##################################################################
sub try_again
{
print "Content-type: text/html\n\n";
print <<__W3__;

<H1>Missing Data!</H1>
<B>Please press the back button and fill in
all required fields!<P></B>

__W3__
exit;
}

##################################################################
sub answer_back
{

$subject = "contact 1 html Thank you";
$msgtext="";
if ($fields{'automessage'} ne "") {
open (AM,"< $fields{'automessage'}");
while (<AM>) {
chop $_;
$msgtext .= "$_\n";
}
close(AM);
}
else {
$msgtext =<<__W4__;

Thank you for your submission. I will be
getting in touch with you soon.

__W4__
}
$replyaddr=$recipients[0];
$mailresult=&sendmail($replyaddr, $replyaddr, $fields{submit_by},
$SEND_MAIL, $subject, $msgtext);
}

##################################################################

sub get_number
{
$newnum=0;
open(COUNTER,"<$fields{'countfile'}");
while($thisnum=<COUNTER>) {
if ($thisnum eq "") { $thisnum = 0;}
$newnum = $thisnum + 1;
}
close(COUNTER);
open(COUNTER,">$fields{'countfile'}");
print COUNTER "$newnum";
close (COUNTER);
$fields{'counter'}=$newnum
}

##################################################################
sub valid_address
{
$testmail = $fields{'submit_by'};
if ($testmail =~/ /)
{ return 0; }
if ($testmail =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ ||
$testmail !~
/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/)
{ return 0; }
else { return 1; }

}

##################################################################
sub bad_email
{
print <<__STOP_OF_BADMAIL__;
Content-type: text/html

<FONT SIZE="+1">
<B>
SORRY! Your request could not be processed because of an
improperly formatted e-mail address. Please use your browser's
back button to return to the form entry page.
</B>
</FONT>
__STOP_OF_BADMAIL__

}

sub get_the_lock
{ ...

mi

unread,
Nov 6, 2005, 11:49:59 AM11/6/05
to Perl Mail::Sendmail
This long script doesn't use the Mail::Sendmail module discussed in
this group, so it may not be the best place to ask.

Besides, the script seems to be doing many things which would be better
done by using the appropriate module. Like CGI.pm for parsing the form,
etc.

My advice: get a better form mailing script. There are many around the
net.

If you would like to customize a simple script which uses the
Mail::Sendmail module, you can try
http://alma.ch/perl/scripts.html#sendform .

If someone here has another form mailer to suggest, please let us know.

Reply all
Reply to author
Forward
0 new messages