#!/usr/bin/perl -wT
# pop-view.cgi
$| = 1;
use strict;
use Mail::POP3Client;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
use MIME::Parser;
use URI::Escape;
use Untaint;
my $cookie = cookie('WebMail') || 0;
my ($user, $pass, $server);
if (!$cookie) {
print redirect("pop-login.html"); exit;
}else{
print header;
($user, $pass, $server) = split(" ",$cookie);
}
my $message = param('mess');
$server = untaint(qr(.*), $server);
$user = untaint(qr(^\w{1,8}$), $user);
$pass = untaint(qr(^\w{1,8}$), $pass);
my $pop = new Mail::POP3Client(HOST => "$server");
$pop->User($user);
$pop->Pass($pass);
$pop->Connect() || &error($pop->Message);
my $parser = new MIME::Parser;
if (!(-d "./$user-$server")) {
system("/bin/mkdir", "-m","0777", "$user-$server");
}
$parser->output_dir("./$user-$server");
my $mail = $pop->Retrieve($message);
my $entity = $parser->parse_data($mail);
my $head = $entity->head;
print qq(To: ) . text_to_html($head->get('To',0));
print qq(CC: ) . text_to_html($head->get('Cc', 0)) if $head->get('Cc', 0);
print qq(Subject: ) . text_to_html($head->get('Subject',0));
print qq(From: ) . text_to_html($head->get('From', 0));
print qq(Date: ) . $head->get('Date', 0) . qq(
\n);
my $parts = $entity->parts;
print p;
if (!$parts) {
print text_to_html($entity->body_as_string);
$entity->purge;
}else{
print text_to_html($entity->parts(0)->bodyhandle->as_string);
print h3("Attachments:");
for (my $i=1; $i<$entity->parts;$i++) {
(my $temp_file_name = $entity->parts($i)->bodyhandle->path) =~
s!^.*$user-$server/!!;
my $uri_file = uri_escape($temp_file_name);
if ($temp_file_name=~/\.(gif|jpg|png)$/i) {
print qq(File: 
);
} else {
print qq(File: $temp_file_name
);
}
}
}
print p({-align=>'center'},
a({-href=>"index.cgi?delete=1&mess=$message"},"Delete Message"), " | ",
a({-href=>"index.cgi"}, "Back to Mail"), " | ",
a({-href=>"pop-logout.cgi"}, "Log Out"));
$pop->Close;
sub text_to_html {
my $raw = shift;
$raw =~ s/([<>])/($1 eq '<') ? "<" : ">\;"/eg;
$raw =~ s!((ht|f)tps?://)([\w-]*)((\..[^\s]*)+)!$1$3$4!g;
$raw =~ s!([\w\-.]+)\@([\w-]+)((\.[\w-]+)*)!$1\@$2$3!g;
$raw =~ s/\n/
/g;
return $raw;
}
sub error {
my $err = shift;
print h3("There was an error connecting to the server ($err). Please try again"),p,
a({-href=>'index.cgi'},"Home");
exit;
}