1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
# Auto refiling for imget -*-Perl-*-
use IM::File qw(im_rename);
sub get_sub ($$$) {
my($folder, $first, $last) = @_;
my($header, $flie, $new_folder, $new_file, $tmp_str, $dir, $msg);
my($touch_file, $touch_file_m, $touch_file_n);
return if ($folder ne &inbox_folder());
$dir = &expand_path($folder);
$touch_file = "$dir/.im_getsbr_touch";
if (-e $touch_file) {
$touch_file_m = -M $touch_file;
$touch_file_n = 0;
if (open(FH, $touch_file)) {
while (<FH>) {
chomp;
$touch_file_n = $_;
}
close(FH);
}
for ($msg = $last; $msg >= $first; $msg--) {
$file = &message_name($folder, $msg);
if (! -e $file) {
last;
}
if (-M $file > $touch_file_m) {
last;
}
if (-M $file == $touch_file_m && $msg <= $touch_file_n) {
last;
}
}
$first = $msg + 1;
}
for ($msg = $first; $msg <= $last; $msg++) {
$file = &message_name($folder, $msg);
if (open(MSG, "$file")) {
$tmp_str = $/;
$/ = "\n\n";
$header = <MSG>;
$/ = $tmp_str;
$new_folder = $folder;
if ($header =~ /(^|\n)X-Bogosity: Yes/i) {
$new_folder = '+spam';
} elsif ($header =~ /(^|\n)X-Spam-Flag: Yes/i) {
$new_folder = '+spam';
} elsif ($header =~ /(^|\n)X-Spam: yes/i) {
$new_folder = '+spam';
# } elsif ($header =~ /(^|\n)X-ML-Name: mew-dist/i) {
# $new_folder = '+mew-dist';
}
if ($new_folder ne $folder) {
if (&create_folder($new_folder) == 0) {
$new_file = &message_name($new_folder, 'new') || die $!;
&im_notice("refiling $folder/$msg to $new_folder.\n");
&im_rename($file, $new_file) || die $!;
}
}
close(MSG);
}
}
if (open(FH, ">$touch_file")) {
print FH "$last\n";
close(FH);
}
}
1;
|