diff options
Diffstat (limited to 'spamassassin/oftc-listmod-learn-mail')
-rwxr-xr-x | spamassassin/oftc-listmod-learn-mail | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/spamassassin/oftc-listmod-learn-mail b/spamassassin/oftc-listmod-learn-mail new file mode 100755 index 0000000..d8074f9 --- /dev/null +++ b/spamassassin/oftc-listmod-learn-mail @@ -0,0 +1,51 @@ +#!/usr/bin/ruby + +SPAMIN="mail/spam-learn" +SPAMOUT="mail/spam-learned" +HAMIN="mail/ham-learn" +HAMOUT="mail/ham-learned" + +$verbose = 0 +if ARGV[0] == "-v" + $verbose = 1 +end + +def check_maildir(d) + throw "#{d} is not a maildir" unless FileTest.directory?(d) + throw "#{d} is not a maildir" unless FileTest.directory?(d+"/new") + throw "#{d} is not a maildir" unless FileTest.directory?(d+"/cur") + throw "#{d} is not a maildir" unless FileTest.directory?(d+"/tmp") + true +end + +def move(filename, to) + basename = File.basename(filename) + component = File.basename( File.dirname(filename) ) + throw "Bad component '#{component}' in filename '#{filename}'." unless %w{cur new tmp}.include?(component) + File.link(filename, to+"/"+component+"/"+basename) + File.unlink(filename) +end + +check_maildir SPAMIN +check_maildir SPAMOUT +check_maildir HAMIN +check_maildir HAMOUT + +Dir[SPAMIN+"/new/*"].each do |filename| + puts "learning #{filename}" if $verbose > 0 + if system("sudo -H -u amavis sa-learn --spam < #{filename} > /dev/null") + puts "moving #{filename}" if $verbose > 0 + move(filename, SPAMOUT) + else + STDERR.puts "Learning of #{filename} failed." + end +end +Dir[HAMIN+"/new/*"].each do |filename| + puts "learning #{filename}" if $verbose > 0 + if system("sudo -H -u amavis sa-learn --ham < #{filename} > /dev/null") + puts "moving #{filename}" if $verbose > 0 + move(filename, HAMOUT) + else + STDERR.puts "Learning of #{filename} failed." + end +end |