Code Comments
Programming Forum and web based access to our favorite programming groups.I have a simple mail script designed to use from command line.
I want create a simple web interface to use this script as remotely
hosted webscript, from webhost.
The script contains two files- Data File.dat(which holds the list of
email addresses, where the mail has to be sent;
the addresses are separated by new lines); and Message template
File.template(this file contains the message template to be sent.)
Need some help and advices.
thanks
------------------------
#!/usr/bin/perl -w
#user configuration begin#
$mailprg = "/usr/sbin/sendmail"; #path to your mail program
$delay = 0.25; #delay in seconds
$from = 'Coname<somename@domain.com>'; #from address in your mail
$subject = 'Trial send'; #subject of newsletter. u can add the spl
code $USERNAME$
$maildata = "mail.dat"; #mail address file
$msgtemplate = "message.template"; #message template file
#user configuration end#
if(@ARGV){
$i = 0;
while($ARGV[$i]){
if($ARGV[$i] eq "--help"){
print "Command Line Options:\n\n";
print "-t\tTest how the message will be formatted\n";
print "-d\tData file listing the email addresses\n";
print "-m\tMessage template file\n";
print "-s\tSubject\n";
print "-f\tFrom address. Quote for security reasons\n";
die "\nMore information at indiWiz.com\n";
}
elsif($ARGV[$i]=~/^-/){
$arr = substr($ARGV[$i],1,1);
if($arr eq "d"){
$maildata = $ARGV[$i+1];
$i+=2;
}
elsif($arr eq "m"){
$msgtemplate = $ARGV[$i+1];
$i+=2;
}
elsif($arr eq "t"){
$testflag = 1;
$i++;
}
elsif($arr eq "s"){
$subject = $ARGV[$i+1];
$i+=2;
}
elsif($arr eq "f"){
$from = $ARGV[$i+1];
$i+=2;
}
else{
die "Wrong argument!";
}
}
}
}
open TEMPLATE, $msgtemplate || die "Cannot open template file!\n";
while(<TEMPLATE> ){
$msg .= $_;
}
close TEMPLATE || die "Cannot close template file!\n";
open MAILFILE,"$maildata" || die "Cannot open data file!\n";
while(<MAILFILE> ){
chomp($_);
@arr = split(/\@/,$_);
$arr[0] = ucfirst($arr[0]);
$tmp = $msg;
$tmp =~ s/\$USERNAME\$/$arr[0]/g;
$subject =~ s/\$USERNAME\$/$arr[0]/g;
$temp = "To: $arr[0]<$_>\n";
$temp .= "From: $from\n";
$temp .= "Subject: $subject\n\n\n";
$temp .= $tmp;
if($testflag){
print $temp;
last;
}
else{
open MAILPRG,"|$mailprg -t" || die "Cannot open mail program!\n";
print MAILPRG $temp;
close MAILPRG || die "Cannot close mailprogram!\n";
if($delay < 0){
$delay = 1;
sleep $delay;
}
elsif($delay < 1){
select(undef,undef,undef,$delay);
}
else{
sleep $delay;
}
print $_,"\n";
}
}
close MAILFILE || die "Cannot close data file!\n";
Post Follow-up to this messagetrend5 wrote:
> Need some help and advices.
What advice are you asking for? Your post did not show
1) what the program generated when you ran it
2) what you expected it to do.
> if(@ARGV){
> $i = 0;
> while($ARGV[$i]){
> if($ARGV[$i] eq "--help"){ print;print;print }
> elsif($ARGV[$i]=~/^-/){
> $arr = substr($ARGV[$i],1,1);
> if ($arr eq "d"){$maildata = $ARGV[$i+1]; $i+=2;}
> elsif($arr eq "m"){$msgtemplate = $ARGV[$i+1]; $i+=2;}
> elsif($arr eq "t"){$testflag = 1; $i++;}
> elsif($arr eq "s"){$subject = $ARGV[$i+1]; $i+=2;}
> elsif($arr eq "f"){$from = $ARGV[$i+1]; $i+=2;}
> else{ die "Wrong argument!"; }
> }
> }
> }
That's a mighty ugly bunch of C code there.
When creating Perl programs, you should program in Perl, not C.
my $Usage = <<EOM;
Command Line Options:
-t Test how the message will be formatted
-d Data file listing the email addresses
-m Message template file
-s Subject
-f From address. Quote for security reasons
More information at indiWiz.com
EOM
if (@ARGV and $ARGV[0] =~ /^-/) {
$_ = shift;
die $Usage if $_ eq '--help';
my $opt = substr $_,1,1;
if ($opt eq "d") { $maildata = shift; }
elsif ($opt eq "m") { $msgtemplate = shift; }
elsif ($opt eq "t") { $testflag = 1; }
elsif ($opt eq "s") { $subject = shift; }
elsif ($opt eq "f") { $from = shift; }
else { die "Invalid option '$_'\n",$Usage; }
}
die "Unexpected command line arguments '@ARGV'\n",$Usage if @ARGV;
> open TEMPLATE, $msgtemplate || die "Cannot open template file!\n";
open TEMPLATE, $msgtemplate or
die "Cannot open template file $msgtemplate - $!\n";
> $subject =~ s/\$USERNAME\$/$arr[0]/g;
That will work only once. You need to keep the original around.
(my $newsubject = $subject) =~ s/\$USERNAME\$/$arr[0]/g;
If you have any more questions, specific ones regarding perl, then
post them to the comp.lang.perl.misc newsgroup.
(comp.lang.perl is defunct; superceded by comp.lang.perl.misc)
-Joe
Post Follow-up to this message"Joe Smith" <joe@inwap.com> wrote in message news:AdGdnf-e6ui87O3fRVn-pg@comcast.com... > > (comp.lang.perl is defunct; superceded by comp.lang.perl.misc) > Why?
Post Follow-up to this messagePC wrote: > "Joe Smith" <joe@inwap.com> wrote in message > news:AdGdnf-e6ui87O3fRVn-pg@comcast.com... > > > Why? The original comp.lang.perl was split into several new newsgroups. This was voted on many many years ago. There is a lot more traffic in comp.lang.perl.misc than comp.lang.perl . -Joe
Post Follow-up to this message
Show a Printable Version
Email This Page to Someone!
Receive updates to this thread
Powered by vBulletin
Copyright 2000-2006 Jelsoft Enterprises Limited.