#!/usr/bin/perl # # author: kurt williams # email: kurtw@nationalgeographic.com # purpouse: email this page to a friend (or enemy, # as the case may be here) cgi script. # written to replace similar hack job that # relied on javascript wonkiness. use strict; use CGI qw| :standard |; use IO; use constant DEFAULTREF => 'http://news.nationalgeographic.com/'; use constant SENDMAIL => '/usr/lib/sendmail'; use constant THANKS => 'http://news.nationalgeographic.com/news/ax/thanks.html'; use constant TEMPLATE => 'email.html'; # reconfig this mf. use constant ANCHOR => ''; my $email = param('email'); my $to = param('tox'); my $refer = param('refer'); my $referer = referer(); $referer = $refer if $refer; ( ($email =~ /@/) && ($to =~ /@/) ) ? ( sendx( $refer ) ) : ( showf( buildform($referer) ) ); sub showf { my $block = shift; print header; print defineHTML( $block ); } sub buildform { my $source = '  Your e-mail address'; my $dest = '  Your friend\'s address'; my $addd = lowe('  Additional comments'); my $f = ''; if ( param('formfill') ) { ($email =~ /@/) ? ($source = lowe($source)) : ( $source = high($source) ); ($to =~ /@/) ? ($dest = lowe($dest)) : ($dest = high($dest) ); } else { $source = lowe($source); $dest = lowe($dest); } $f .= start_form . table( TR( td( $source ), td( {-valign=>'top'}, textfield( -name=>'email', -value=>$email, -maxlength=>50 ) ) ), TR( td( $dest ), td( {-valign=>'top'}, textfield( -name=>'tox', -value=>$to, -maxlength=>50 ), hidden( -name=>'refer', -value=>$referer ), hidden( -name=>'formfill', -value=>1 ) ) ), TR( td({-valign=>'top'}, $addd), td( textarea( -name=>'vcom', -rows=>7, cols=>28 ) ) ), TR( td(), td( submit('send the page') )) ), end_form; return( $f ); } sub sendx { my $refer = shift; my $thnx = THANKS; my $send = SENDMAIL; my $mail = buildmessage($refer); my $safe = ent( $to ); print "Location:$refer \n\n"; open( MAIL, "| $send $safe"); print MAIL $mail; close MAIL; } sub defineHTML { my $string = shift; my $file = TEMPLATE; my $anchor = ANCHOR; my @h = (); my $f = IO::File->new($file) if (-e $file); # keep on trucking if no file. if ($f) { while (<$f>) { s#$anchor#$string#g; push @h, $_; } } ( scalar @h ) ? ( return( join '', @h ) ) : ( return $string ); } sub buildmessage { my $ref = shift; $ref = DEFAULTREF unless $ref; my $msg = param('vcom'); $msg .= "\n"; my $message = <^"]/"&#".ord($&).";"/ge; $_; } sub high { my $s = shift; my $r = "

$s

"; return $r; } sub lowe { my $s = shift; my $r = qq[

$s

]; return $r; } __END__