Viewing file: process.cgi (2.84 KB) -rwxr-xr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/perl # process.cgi # Delete, move or whitelist messages
require './spam-lib.pl'; &foreign_require("mailbox", "mailbox-lib.pl"); $folder = &spam_file_folder(); &disable_indexing($folder); &ReadParse();
@delete = sort { $a <=> $b } split(/\0/, $in{'d'}); @mail = &mailbox::mailbox_list_mails_sorted($delete[0], $delete[@delete-1], $folder); foreach $d (@delete) { push(@delmail, $mail[$d]); }
if ($in{'inbox'} || $in{'whitelist'} || $in{'ham'}) { # Move mails to inbox @delete || &error($mailbox::text{'delete_emnone'}); @folders = &mailbox::list_folders(); ($inbox) = grep { $_->{'inbox'} } @folders; if ($userconfig{'inbox'}) { $mfolder = &mailbox::find_named_folder( $userconfig{'inbox'}, \@folders); } $mfolder ||= $inbox; foreach $d (@delete) { push(@movemail, $mail[$d]); push(@addrs, map { $_->[0] } &mailbox::split_addresses($mail[$d]->{'header'}->{'from'})); }
# Pass through spamassassin to remove headers, then add to Inbox &mailbox::lock_folder($mfolder); foreach $d (@movemail) { local $temp = &transname(); &mailbox::send_mail($d, $temp); local $newmail = &mailbox::read_mail_file("$config{'spamassassin'} -d <$temp |"); $newmail || &error($text{'process_eclean'}); &mailbox::write_mail_folder($newmail, $mfolder); unlink($temp); } &mailbox::unlock_folder($mfolder);
# Delete from spam folder &mailbox::lock_folder($folder); &mailbox::mailbox_delete_mail($folder, $mfolder, @movemail); &mailbox::unlock_folder($folder); } if ($in{'whitelist'}) { # Add senders to whitelist foreach $d (@delete) { push(@addrs, map { $_->[0] } &mailbox::split_addresses($mail[$d]->{'header'}->{'from'})); } &lock_file($local_cf); $conf = &get_config(); @from = map { @{$_->{'words'}} } &find("whitelist_from", $conf); %already = map { $_, 1 } @from; @newaddrs = grep { !$already{$_} } &unique(@addrs); push(@from, @newaddrs); &save_directives($conf, 'whitelist_from', \@from, 1); &flush_file_lines(); &unlock_file($local_cf); } if ($in{'ham'}) { # Report to spamassassin as ham local $temp = &transname(); foreach $d (@delmail) { &mailbox::send_mail($d, $temp); local $out = `$config{'sa_learn'} --ham <$temp 2>&1`; unlink($temp); if ($? || $out =~ /failed/i) { &error(&text('process_ereport', "<pre>$out</pre>")); } } } if ($in{'delete'} || $in{'razor'}) { # Delete messages @delete || &error($mailbox::text{'delete_enone'}); &mailbox::lock_folder($folder); &mailbox::mailbox_delete_mail($folder, @delmail); &mailbox::unlock_folder($folder); } if ($in{'razor'}) { # Report to spamassassin as spam local $temp = &transname(); foreach $d (@delmail) { &mailbox::send_mail($d, $temp); local $out = `$config{'spamassassin'} -r <$temp 2>&1`; unlink($temp); if ($? || $out =~ /failed/i) { &error(&text('process_ereport', "<pre>$out</pre>")); } } }
&redirect("mail.cgi");
|