",&text('detach_ok', "$paths[$i]", $sz),"
\n"; } &mail_page_footer("view_mail.cgi?idx=$in{'idx'}&folder=$in{'folder'}&user=$euser&dom=$in{'dom'}", $text{'view_return'}, "list_mail.cgi?folder=$in{'folder'}&user=$euser&dom=$in{'dom'}", $text{'mail_return'}, &user_list_link(), $text{'index_return'}); exit; } elsif ($in{'black'}) { # Add sender to global SpamAssassin blacklist, and tell user &mail_page_header($text{'black_title'}); &foreign_require("spam", "spam-lib.pl"); local $conf = &spam::get_config(); local @from = map { @{$_->{'words'}} } &spam::find("blacklist_from", $conf); local %already = map { $_, 1 } @from; local ($spamfrom) = &address_parts($mail->{'header'}->{'from'}); if ($already{$spamfrom}) { print "",&text('black_already', "$spamfrom"),"
\n"; } else { push(@from, $spamfrom); &spam::save_directives($conf, 'blacklist_from', \@from, 1); &flush_file_lines(); print "",&text('black_done', "$spamfrom"),"
\n"; } &mail_page_footer("list_mail.cgi?folder=$in{'folder'}&user=$euser&dom=$in{'dom'}", $text{'mail_return'}, &user_list_link(), $text{'index_return'}); exit; } elsif ($in{'razor'}) { # Report message to Razor and tell user &mail_page_header($text{'razor_title'}); print "$text{'razor_report'}\n"; print "
"; local $cmd = &spam_report_cmd($in{'user'}); local $temp = &transname(); &send_mail($mail, $temp, 0, 1); &open_execute_command(OUT, "$cmd <$temp 2>&1", 1); local $error; while() { print &html_escape($_); $error++ if (/failed/i); } close(OUT); unlink($temp); print "
\n"; } else { if ($config{'spam_del'}) { # Delete message too &lock_folder($folder); &mailbox_delete_mail($folder, $mail); &unlock_folder($folder); print "$text{'razor_deleted'}
\n"; } else { print "$text{'razor_done'}
\n"; } } &mail_page_footer("list_mail.cgi?folder=$in{'folder'}&user=$euser&dom=$in{'dom'}", $text{'mail_return'}, &user_list_link(), $text{'index_return'}); exit; } if (!@mailforward) { &parse_mail($mail); @attach = @{$mail->{'attach'}}; } if ($in{'strip'}) { # Remove all non-body attachments local $newmail = { 'headers' => $mail->{'headers'}, 'header' => $mail->{'header'}, 'fromline' => $mail->{'fromline'} }; foreach $a (@attach) { if ($a->{'type'} eq 'text/plain' || $a->{'type'} eq 'text') { $newmail->{'attach'} = [ $a ]; last; } } &lock_folder($folder); &mailbox_modify_mail($mail, $newmail, $folder); &unlock_folder($folder); &redirect("list_mail.cgi?user=$euser&folder=$in{'folder'}". "&dom=$in{'dom'}"); exit; } if ($in{'enew'}) { # Editing an existing message, so keep same fields $to = $mail->{'header'}->{'to'}; $rto = $mail->{'header'}->{'reply-to'}; $from = $mail->{'header'}->{'from'}; $cc = $mail->{'header'}->{'cc'}; $ouser = $1 if ($from =~ /^(\S+)\@/); } else { if (!$in{'forward'} && !@mailforward) { # Replying to a message, so set To: field $to = $mail->{'header'}->{'reply-to'}; $to = $mail->{'header'}->{'from'} if (!$to); } if ($in{'rall'}) { # If replying to all, add any addresses in the original # To: or Cc: to our new Cc: address. $cc = $mail->{'header'}->{'to'}; $cc .= ", ".$mail->{'header'}->{'cc'} if ($mail->{'header'}->{'cc'}); } } # Convert MIMEwords in headers to 8 bit for display $to = &decode_mimewords($to); $rto = &decode_mimewords($rto); $cc = &decode_mimewords($cc); $bcc = &decode_mimewords($bcc); # Work out new subject, depending on whether we are replying # our forwarding a message (or neither) local $qu = !$in{'enew'} && (!$in{'forward'} || !$config{'fwd_mode'}); $subject = &html_escape(&decode_mimewords( $mail->{'header'}->{'subject'})); $subject = "Re: ".$subject if ($subject !~ /^Re:/i && !$in{'forward'} && !@mailforward && !$in{'enew'}); $subject = "Fwd: ".$subject if ($subject !~ /^Fwd:/i && ($in{'forward'} || @mailforward)); # Construct the initial mail text $sig = &get_signature($in{'user'}); ($quote, $html_edit, $body) = "ed_message($mail, $qu, $sig); # Load images using server in replies $quote = &disable_html_images($quote, 3); # Don't include the original body as an attachment @attach = &remove_body_attachments($mail, \@attach); if (!$in{'forward'} && !$in{'enew'}) { # When replying, lose non-cid attachments @attach = grep { $_->{'header'}->{'content-id'} || $_->{'header'}->{'content-location'} } @attach; } # For a HTML reply or forward, fix up the cid: to refer to attachments # in the original message. if ($html_edit) { my $uuser = &urlize($in{'user'}); $quote = &fix_cids($quote, \@attach, "detach.cgi?user=$uuser&idx=$in{'idx'}&folder=$in{'folder'}$subs"); } # Show header &mail_page_header( $in{'forward'} || @mailforward ? $text{'forward_title'} : $in{'enew'} ? $text{'enew_title'} : $text{'reply_title'}, undef, undef, &folder_link($in{'user'}, $folder)); } # Show form start, with upload progress tracker hook $upid = time().$$; $onsubmit = &read_parse_mime_javascript($upid, [ map { "attach$_" } (0..10) ]); print &ui_form_start("send_mail.cgi?id=$upid", "form-data", undef, $onsubmit); # Output various hidden fields print &ui_hidden("user", $in{'user'}); print &ui_hidden("dom", $in{'dom'}); print &ui_hidden("ouser", $ouser); print &ui_hidden("idx", $in{'idx'}); print &ui_hidden("folder", $in{'folder'}); print &ui_hidden("new", $in{'new'}); print &ui_hidden("enew", $in{'enew'}); foreach $s (@sub) { print &ui_hidden("sub", $s); } print &ui_hidden("charset", $main::force_charset); # Start tabs for from / to / cc / bcc # Subject is separate print &ui_table_start($text{'reply_headers'}, "width=100%", 2); print "