#!/usr/bin/perl # # 1) for this program to work your site must be a unix, linux or # some other OS (like newer MACS) that that has the sendmail command # # 2) your site must also allow you to use the sendmail command # when you run the CGI program # # 3) your site also must have a perl compiler for you to run # # 4) your site must also allow you to run the perl compiler # when you run CGI programs # # 5) in this program the path to the PERL compiler is # /usr/bin/perl # if your computer site has the perl compiler stored # in a different path you will have to change that. # that path is at the very 1st line of this program # look up to find it. # # 6) in this program the path to the sendmail command is # /usr/sbin/sendmail # if your computer site has the sendmail command stored # in a different path you will have to change that. # # 7) i orginally wrote the program on a www.tripod.com # free web site and i used their free software to # process the data coming in from the web site. the files # TripodCGI.pm # CGI.pm # must be copied to your cgi-bin directory for the # perl program to work. they can be gotten for free # from www.tripod.com # and i have them displayed on the tripod website # http://phoenix_copwatch.tripod.com # # # this program is used to send press releases to many email addresses # # the program displays a HTML form and the user must enter # a from email address, a subject of the press release and # the text of the press release. # # when the user clicks on the SUBMIT button an email is # generate and mailed to all the email addresses in the # file krud.txt # # the email appears to be sent from the "from email address" # the user entered in the form with the subject name. # # the default heading or title printed on the HTML form is # # Send Press Releases to Arizona Media # # you can change the both the name of the file name # which contains the email addresses and the name of # the default heading by passing emailfile and title # as variable to the program. this is done by coding # them as # # title=xxxxx # emailfile=xxxxx # # xxxxxx can not contain spaces or other special characters # if you wish for xxxxx to contains spaces or other special # characters you must put write the character in hex as %xx # such as: # # title=Press%20Releases%20For%20Indy%20Media # # # the default url is: # # href="cgi-bin/email_perl2.pl" # # in your html you add the variables to the end of the # url by first adding a "?" after the URL and the first # variable as in: # # href="cgi-bin/email_perl2.pl?emailfile=foo.txt" # # if you wish to add a second variable to this mess you # add an "&" to theprior mess and add the next variable # # href="cgi-bin/email_perl2.pl?emailfile=foo.txt&title=new%20title" # # if you have a 3rd or more variable to add you would add another # "&" for each new variable followed by the variable name and text. # print "Content-type: text/html", "\n\n"; print "<html>\n"; print "<body background=\"nevada.gif\">\n"; require TripodCGI; use CGI; $cgi = new CGI; # # get the information they entered on the form # $from=$cgi->param('from'); # # remove leading spaces from the from email address # $from=~s/^ *//; # # remove trailing spaces from the from email address # $from=~s/ *$//; $subject=$cgi->param('subject'); # # remove leading and trailing spaces from the subject # $subject=~s/^ *//; $subject=~s/ *$//; if ($subject eq "" ) { $subject = "Press Release - "; } $text=$cgi->param('text'); # # if they pass us a title in the variable "title" # use it for the title. # else use a default title # # you set the title by calling the program like this # email_perl2.pl?title=xxxxxxx # in xxxx all spaces and other special characters must be converted to hex # you set the title and emailfile by calling the program like this # email_perl2.pl?title=xxxxxxx&emailfile=xxxxxxx # in xxxx all spaces and other special characters must be converted to hex $title=$cgi->param('title'); if ($title eq "" ) { $title = "Send Press Releases to Arizona Media"; } # # they can pass us a file name in the variable "emailfile" # else use the default file of krud.txt # # # you set the emailfile by calling the program like this # email_perl2.pl?emailfile=xxxxxxx # in xxxx all spaces and other special characters must be converted to hex # you set the emailfile and title by calling the program like this # email_perl2.pl?emailfile=xxxxxxx&title=xxxxxxx # in xxxx all spaces and other special characters must be converted to hex $emailfile=$cgi->param('emailfile'); if ($emailfile eq "") { $emailfile="krud.txt"; } # # verify that the email file exists before we let the user play with the program # &does_email_file_exist; # # first time thru display the stinking form # if ( $from eq "" && $text eq "" ) { &display_form; exit; } &check_errors; open(EMAIL,"|/usr/sbin/sendmail -t"); print EMAIL "TO: $from\n"; print EMAIL "FROM: $from\n"; print EMAIL "sender: $from\n"; print EMAIL "return-path: $from\n"; print EMAIL "Subject: $subject\n"; open (BCC,"$emailfile"); while (<BCC>) { print EMAIL "BCC: $_"; $sentletters++; } close(BCC); print EMAIL "$text\n"; print EMAIL "\n"; print EMAIL ".\n"; close(EMAIL); print "<font color=\"red\" size=\"300%\">$sentletters e-mails sent from $emailfile</font>\n"; &display_form; exit; sub check_errors { $errors = 0; if (does_email_file_exist()) { print "ERROR! file $emailfile does not exist!<br>"; $errors++; } if ( $from =~ /^ *$/ ) { print "ERROR! From e-mail address required!<br>"; $errors++; } else { if ( $from !~ /@/ ) { print "ERROR! From e-mail address must contain an \@ character<br>"; $errors++; } else { if ( $from !~ /.@/ ) { print "ERROR! From e-mail '$from' address must contain a username like username\@site.com<br>"; $errors++; } if ( $from !~ /@./ ) { print "ERROR! From e-mail '$from' address must contain a site name like username\@sitename.com<br>"; $errors++; } if ( $from !~ /@.*[^.]\.[^.]/ ) { print "ERROR! From e-mail '$from' address site name must contain a "." like username\@sitename.com<br>"; $errors++; } if ( $from =~ /\.$/ ) { print "ERROR! From e-mail '$from' address site name can't end with a "."<br>"; $errors++; } } } if ( $subject =~ /^ *$/ ) { print "ERROR! Subject required!<br>"; $errors++; } if ( $text =~ /^ *$/ ) { print "ERROR! Some Text in the body is required!<br>"; $errors++; } if ($errors > 0 ) { print "Error! E-mail(s) not sent<p>"; &display_form; exit; } return; } sub display_form { print "<h1 align=\"center\">$title</h1>\n"; print "<center>\n"; print "<table border=\"0\">\n"; print "<tr>\n"; print "<td>\n"; print "<form action=\"email_perl2.pl\">\n"; print "<table border=\"0\">\n"; print "<tr valign=\"top\"><td>From:</td><td> <input type=\"text\" size=\"60\" name=\"from\" value=\"$from\"></td></tr>\n"; print "<tr valign=\"top\"><td>Subject:</td><td> <input type=\"text\" size=\"60\" name=\"subject\" value=\"$subject\"></td></tr>\n"; print "</table>\n"; print "<p>\n"; print "<input type=\"submit\" name=submit value=\"Send Press Release\"> \n"; print "<p>\n"; print "Text of Press Release - NO GRAPHICS ALLOWED - just ASCII text!<br>\n"; print "<textarea name=\"text\" cols=\"79\" rows=\"20\">$text</textarea>\n"; print "<p>\n"; print "<input type=\"reset\" name=reset value=\"CLEAR MENU\">\n"; print "<input type=\"hidden\" name=\"title\" value=\"$title\">\n"; print "<input type=\"hidden\" name=\"emailfile\" value=\"$emailfile\">\n"; print "</form>\n"; print "</td>\n"; print "</tr>\n"; print "</table>\n"; print "</center>\n"; return; } sub does_email_file_exist { $rc=0; if (! -f $emailfile) { print "<font size=\"300%\" color=\"red\">ERROR! file $emailfile does not exist!</font><p>"; $rc = 1; } if (-z $emailfile) { print "<font size=\"300%\" color=\"red\">ERROR! file $emailfile is empty and contains no email addresses!</font><p>"; $rc = 1; } return $rc; }