#!/usr/local/bin/perl # view_mail.cgi # View a single email message require './spam-lib.pl'; &foreign_require("mailbox", "mailbox-lib.pl"); $folder = &spam_file_folder(); &disable_indexing($folder); $force_charset = ''; &ReadParse(); &ui_print_header(undef, $mailbox::text{'view_title'}, ""); @mail = &mailbox::mailbox_list_mails_sorted($in{'idx'}, $in{'idx'}, $folder); $mail = $mail[$in{'idx'}]; &mailbox::parse_mail($mail); @sub = split(/\0/, $in{'sub'}); $subs = join("", map { "&sub=$_" } @sub); foreach $s (@sub) { # We are looking at a mail within a mail .. &mailbox::decrypt_attachments($mail); local $amail = &mailbox::extract_mail($mail->{'attach'}->[$s]->{'data'}); &mailbox::parse_mail($amail); $mail = $amail; } dbmopen(%read, "$user_config_directory/mailbox/read", 0600); if ($mailbox::userconfig{'auto_mark'}) { eval { $read{$mail->{'header'}->{'message-id'}} = 1 } if (!$read{$mail->{'header'}->{'message-id'}}); } print "
\n";
}
print "",&mailbox::text('view_desc', $in{'idx'}+1,
$folder->{'name'}),"\n";
if ($in{'idx'} < @mail-1) {
print "",
"
\n";
}
}
else {
print "$text{'view_sub'}\n";
}
print "
| ||||||||||||||||
|
\n"; # Show body attachment, with properly linked URLs if ($body && $body->{'data'} =~ /\S/) { if ($body eq $textbody) { # Show plain text print "
\n";
foreach $l (&mailbox::wrap_lines($body->{'data'},
$mailbox::userconfig{'wrap_width'})) {
print &mailbox::link_urls_and_escape($l),"\n";
}
print " |
\n"; } elsif ($body eq $htmlbody) { # Attempt to show HTML print "
| \n"; print &mailbox::safe_html($body->{'data'}); print " |
\n"; } } # Display other attachments if (@attach) { print "
| $mailbox::text{'view_attach'} |
| \n";
foreach $a (@attach) {
local $fn;
$size = (int(length($a->{'data'})/1000)+1)." Kb";
local $cb;
if ($a->{'type'} eq 'message/rfc822') {
push(@titles, "$mailbox::text{'view_sub'} $size"); } elsif ($a->{'filename'}) { push(@titles, &mailbox::decode_mimewords($a->{'filename'}). " $size"); $fn = &mailbox::decode_mimewords($a->{'filename'}); push(@detach, [ $a->{'idx'}, $fn ]); } else { push(@titles, "$a->{'type'} $size"); $a->{'type'} =~ /\/(\S+)$/; $fn = "file.$1"; push(@detach, [ $a->{'idx'}, $fn ]); } $fn =~ s/ /_/g; $fn =~ s/\#/_/g; $fn = &html_escape($fn); if ($a->{'type'} eq 'message/rfc822') { push(@links, "view_mail.cgi?idx=$in{'idx'}$subs&sub=$a->{'idx'}"); } else { push(@links, "detach.cgi/$fn?idx=$in{'idx'}&attach=$a->{'idx'}$subs"); } push(@icons, "/mailbox/images/boxes.gif"); } &icons_table(\@links, \@titles, \@icons, 8); print " |
\n"; } # Display GnuPG results if (defined($sigcode)) { print "
| $mailbox::text{'view_gnupg'} |
| ";
$sigmessage = &html_escape($sigmessage);
$sigmessage = $sigmessage if ($sigcode == 4);
print &mailbox::text('view_gnupg_'.$sigcode, $sigmessage),"\n";
if ($sigcode == 3) {
local $url = "/$module_name/view_mail.cgi?idx=$in{'idx'}&folder=$in{'folder'}$subs";
print " ",&mailbox::text('view_recv', $sigmessage, "/gnupg/recv.cgi?id=$sigmessage&return=".&urlize($url)."&returnmsg=".&urlize($text{'view_return'})),"\n"; } print " |
\n"; } if ($deccode) { print "
| $text{'view_crypt'} |
";
print &mailbox::text('view_crypt_'.$deccode, "$decmessage"); print " |
\n"; } dbmclose(%read); local @sr = !@sub ? ( ) : ( "view_mail.cgi?idx=$in{'idx'}", $mailbox::text{'view_return'} ), $s = int((@mail - $in{'idx'} - 1) / $mailbox::userconfig{'perpage'}) * $mailbox::userconfig{'perpage'}; &ui_print_footer(@sub ? ( "view_mail.cgi?idx=$in{'idx'}", $mailbox::text{'view_return'} ) : ( ), "mail.cgi", $text{'mail_return'}); # address_link(address) sub address_link { local @addrs = &mailbox::split_addresses(&mailbox::decode_mimewords($_[0])); local @rv; foreach $a (@addrs) { push(@rv, &html_escape($a->[2])); } return join(" , ", @rv); }