1#!/usr/local/bin/perl 2# Apply a filter to email in some folder 3 4require './filter-lib.pl'; 5&ReadParse(); 6&error_setup($text{'move_err'}); 7 8# Get the filter 9@filters = &list_filters(); 10($filter) = grep { $_->{'index'} == $in{'idx'} } @filters; 11$filter || &error($text{'save_egone'}); 12 13# Get the source and destination folders 14@folders = &mailbox::list_folders(); 15$src = &mailbox::find_named_folder($in{'movefrom'}, \@folders); 16$src || &error(&text('move_esrc', $in{'movefrom'})); 17$dest = &file_to_folder($filter->{'action'}, \@folders); 18$dest || &error(&text('move_edest', $filter->{'action'})); 19&mailbox::folder_name($src) eq &mailbox::folder_name($dest) && 20 &error($text{'move_esame'}); 21 22&ui_print_unbuffered_header(undef, $text{'move_title'}, ""); 23 24# Find matching messages 25if ($filter->{'condspam'}) { 26 @fields = ( [ "X-Spam-Status", "Yes" ] ); 27 } 28elsif ($filter->{'condlevel'}) { 29 $stars = "*" x $filter->{'condlevel'}; 30 @fields = ( [ "X-Spam-Level", $stars ] ); 31 } 32else { 33 @fields = ( [ lc($filter->{'condheader'}), 34 $filter->{'condvalue'}, 1 ] ); 35 } 36print &text('move_finding', &mailbox::folder_name($src)),"<br>\n"; 37@mails = &mailbox::mailbox_search_mail(\@fields, 1, $src, undef, 1); 38if (!@mails) { 39 print $text{'move_none'},"<p>\n"; 40 } 41else { 42 print &text('move_found', scalar(@mails)),"<p>\n"; 43 44 print &text('move_moving', scalar(@mails), 45 &mailbox::folder_name($dest)),"<br>\n"; 46 &mailbox::mailbox_move_mail($src, $dest, reverse(@mails)); 47 print $text{'move_done'},"<p>\n"; 48 } 49 50if (defined(&theme_post_save_folder)) { 51 &theme_post_save_folder($src); 52 &theme_post_save_folder($dest); 53 } 54 55&ui_print_footer("", $text{'index_return'}); 56 57