I have a script that needs to have the email acknowledgment sent to the email that the customer gives. However, when doing it, it doesn't work when I test it. Can anyone view this and let me know if I am mising something. I have changed a few things to keep it private, so if you see the xxx it is okay.

Thanks~

#!/usr/bin/perl
#inter.cgi - saves form data to a file, and creates
#three different dynamic Web pages
print "Content-type: text/html\n\n";
use CGI qw(:standard -debug);
use Mail::Sendmail;

#prevent Perl from creating undeclared variables
use strict;

#declare variables
my ($name, $email, $comments, $data_ok, $msg, %mail);

if ($ENV{'REQUEST_METHOD'} eq "POST") {
    ($name, $email, $comments) = get_input();
    ($name, $email, $comments) = format_input();
    ($data_ok, $msg) = validate_input();
    if ($data_ok eq "Y") {
        save_to_file();
        create_acknowledgment_page();
        create_email_aknowledgment();
    }
    else {
        create_error_page();
    }
}
else {
    create_comments_page();
}
exit;

#*****user-defined functions*****
sub get_input {
    return param('Name'), param('Email'), param('Comments');
} #end get_input

sub format_input {
    #declare and assign values to temporary variables
    my ($n, $e, $c);
    ($n, $e, $c) = ($name, $email, $comments);
    #remove leading and trailing spaces from name
    $n =~ s/^ +//;
    $n =~ s/ +$//;
    #remove leading and trailing spaces from e-mail address
    $e =~ s/^ +//;
    $e =~ s/ +$//;
    #remove leading and trailing whitespace characters
    #from comments
    $c =~ s/^\s+//;
    $c =~ s/\s+$//;
    #replace return and newline combination within comments
    #with a space
    $c =~ tr/\r\n/ /;
    #remove extra spaces from within comments
    $c =~ tr/ //s;
    return $n, $e, $c;
} #end format_input

sub validate_input {
    my $valid = "Y";
    my $errormsg;
    if ($name eq "" or $email eq "" or $comments eq "") {
        $valid = "N";
        $errormsg = "complete all items";
    }
    elsif ($email !~ m/[\w\-]+\@[\w\-]+\.[\w\-]+/) {
        $valid = "N";
        $errormsg = "enter a valid e-mail address";
    }
    return $valid, $errormsg;
} #end validate_input

sub save_to_file {
    open(OUTFILE, ">> comments.txt")
        or die "Error opening comments.txt for save. $!, stopped";
    print OUTFILE "$name|$email|$comments\n";
    close(OUTFILE);
} #end save_to_file

sub create_acknowledgment_page {
    print "<HTML>\n";
    print "<HEAD><TITLE>International Coffees</TITLE></HEAD>\n";
    print "<BODY>\n";
    print "<H2>$name, thank you for the following \n";
    print "comments:<BR><BR>$comments\n";
    print "</H2></BODY></HTML>\n";
} #end create_acknowledgment_page

sub create_email_acknowledgment {
    my(%mail);
    $mail{"To"} = $email;
    $mail{"From"} = 'xxxx@xxx.com';
    $mail{"Subject"} = 'International Coffee Comments';
    $mail{"Smtp"} = 'crux.xxxx.xxx';
    $mail{"Message"} = 'Thank you, $name for submitting your comments: $comments.';
    sendmail(%mail); 
} #end create_email_acknowledgment

sub create_error_page {
    print "<HTML>\n";
    print "<HEAD><TITLE>International Coffees</TITLE></HEAD>\n";
    print "<BODY>\n";
    print "<H2>Please return to the form and \n";
    print "$msg.</H2>\n";
    print "</BODY></HTML>\n";
} #end create_error_page

sub create_comments_page {
    my (@records, $name_field, $email_field, $com_field);
    open(INFILE, "< c10ex5.txt")
        or die "Error opening c10ex5.txt. $!, stopped";

    print "<HTML>\n";
    print "<HEAD><TITLE>International Coffees</TITLE></HEAD>\n";
    print "<BODY>\n";
    print "<H2>What other coffee lovers say \n";
    print "about our coffees:</H2>\n";
    @records = <INFILE>;
    close(INFILE);
    foreach my $rec (@records) {
        chomp($rec);
        ($name_field, $email_field, $com_field) = split(/\|/, $rec);
        print "<B>Name:</B> $name_field<BR>\n";
        print "<B>Comments:</B> $com_field<BR>\n";
        print "<HR>";
    }
    print "</BODY></HTML>\n";
} #end create_comments_page

Edited 3 Years Ago by Nick Evan: Fixed formatting

"it doesn't work" is too vague. Any error messages? What does it do? Is Mail::Sendmail installed?

Use code tags to post code.

"it doesn't work" is too vague. Any error messages? What does it do? Is Mail::Sendmail installed?

Use code tags to post code.

I actually ended up getting it to work... thanks anyways. I appreciate it!

This article has been dead for over six months. Start a new discussion instead.